Laravel中kernel实例化的示例分析
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,这篇文章将为大家详细讲解有关Laravel中kernel实例化的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Laravel kernel实例化$kerne
千家信息网最后更新 2025年02月02日Laravel中kernel实例化的示例分析
这篇文章将为大家详细讲解有关Laravel中kernel实例化的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
Laravel kernel实例化
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
实例化 Kernel
在应用进行实例化时,已经初始化了很多的基础操作,所以下面的构造方法将会直接使用服务容器的依赖注入来解决类之间的依赖关系。
// \Illuminate\Contracts\Http\Kernel 类构造器依赖 \Illuminate\Contracts\Foundation\Application 和 \Illuminate\Routing\Router,将会通过服务容器来处理依赖关系public function __construct(Application $app, Router $router){ $this->app = $app; // 主要委托 $router 来处理 $this->router = $router; // 以下均为中间件的设置 $router->middlewarePriority = $this->middlewarePriority; foreach ($this->middlewareGroups as $key => $middleware) { $router->middlewareGroup($key, $middleware); } foreach ($this->routeMiddleware as $key => $middleware) { $router->aliasMiddleware($key, $middleware); }}\Illuminate\Contracts\Foundation\Application 的处理:make 时通过别名方式直接调用 $this->instances['app']\Illuminate\Routing\Router 的处理:make 时通过别名方式直接调用 $this->bindings['router'] 数组里面 concrete 对应的匿名函数Router 依赖 \Illuminate\Contracts\Events\Dispatcher 和 \Illuminate\Container\Containerpublic function __construct(Dispatcher $events, Container $container = null){ $this->events = $events; $this->routes = new RouteCollection; $this->container = $container ?: new Container;}\Illuminate\Contracts\Events\Dispatcher 的处理:make 时通过别名方式直接调用 $this->bindings['events'] 数组里面 concrete 对应的匿名函数Dispatcher 依赖 \Illuminate\Contracts\Container\Containerpublic function __construct(ContainerContract $container = null){ $this->container = $container ?: new Container;}\Illuminate\Container\Container 的处理:make 时直接调用 $this->instances['Illuminate\Container\Container'] = Object(app)\Illuminate\Contracts\Container\Container 的处理:make 时调用别名直接调用 $this->instances['app'] = Object(app)上面两个一样,没有区别
注意:以上所列出的依赖关系,都直接委托给服务容器进行自动处理了,不需要怕怕
对 $this->bindings['router'] 和 $this->bindings['events'] 绑定事件的处理,make 时将会直接调用数组键 concrete 对应的匿名函数。
make 时使用到的代码片段
##############################################if ($concrete instanceof Closure) { return $concrete($this, end($this->with)); }###############################################$this->bindings['router'] = [ 'concrete' => function ($app) { return new Router($app['events'], $app); }, 'shared' => 'true', ];$router = new Router($app['events'], $app);\Illuminate\Routing\Routerpublic function __construct(Dispatcher $events, Container $container = null){ $this->events = $events; $this->routes = new RouteCollection; $this->container = $container ?: new Container;}
返回一个 Router 对象,同时会重置 $this->instances['router'] = $router 对象,供下次直接调用。
$this->bindings['events'] = [ 'concrete' => function ($app) { return (new Dispatcher($app))->setQueueResolver(function () use ($app) { return $app->make(QueueFactoryContract::class); }); } 'shared' => 'true',];$dispatcher = (new \Illuminate\Events\Dispatcher($app))->setQueueResolver(function () use ($app) { return $app->make(QueueFactoryContract::class); });Illuminate\Events\Dispatcher:public function __construct(ContainerContract $container = null){ $this->container = $container ?: new Container;}public function setQueueResolver(callable $resolver){ $this->queueResolver = $resolver; return $this;}
返回一个 Dispatcher 对象,同时会重置 $this->instances['events'] = $dispatcher 对象,供下次直接调用。
注意:
kernel对象是融合了应用和路由的对象,路由又注入了IlluminateEventsDispatcher对象,此为核心对象。
关于"Laravel中kernel实例化的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
处理
对象
实例
别名
函数
容器
数组
方式
篇文章
服务
示例
分析
同时
更多
路由
委托
应用
不错
实用
两个
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
客户端修改sql数据库
当前的软件开发模式有
1月服务器
viso 数据库形状
视频剪辑软件开发上市企业
山西莱普创思网络技术有限公司
asp小旋风服务器下载
未找到指定主机服务器
绥中网络安全宣传
东南大学网络安全硕士学院
无锡一站式软件开发记录
服务器锁插件
开网吧要办网络安全证
xplane11更新导航数据库
闵行区常规网络技术服务销售方法
企业软件开发价格咨询
如何制定软件开发标准
网络安全培训教育观后感
计算机信息网络安全防护研究
电大期末考试试题数据库应用技术
数据库的备份设备在哪看
查看本机数据库端口映射
苹果手机软件开发者未受信用
网络安全交通行业怎么干
确保全市网络安全工作
小米域名服务器
四川科技大学互联网学院
家庭服务器怎么连接
哈利波特华为服务器
常规软件开发目的