Laravel中kernel实例化的示例分析
发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,这篇文章将为大家详细讲解有关Laravel中kernel实例化的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Laravel kernel实例化$kerne
千家信息网最后更新 2025年11月09日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安全错误
数据库的锁怎样保障安全
人鼠同源lncrna数据库
数据库的安全管理实验思考题
网络安全建设咨询报告
掌握软件开发技术
华为登陆钱包无法联接服务器
三级网络技术flag值
无线路由器的dhcp服务器
怎么申请成为一个服务器
sa数据库密码修改
数据库只有一个主键吗
小缇娜的奇幻之地服务器
mcp软件登录服务器
旅游休闲软件开发
r4900服务器主板原理框图
滁州软件开发制作
网络安全设备维护协议
服务器怎么租
建设网络安全校园实施方案
网络安全机房包括堡垒机
tasker数据库
服务器网络布线费用
数据库表限制输入长度
网站服务器能用电脑吗
公安部网络安全局刘伟
数据库查消费
未来网络安全体系
国家青少年网络安全教育宣传视频
asee数据库
幼儿园网络安全知识进校园
杭州络町网络技术怎么样