一文讲解关于Laravel kernel实例化

2022-05-15 0 245

下面由Laravel教程栏目给大家介绍关于Laravel kernel实例化F,希望对需要的朋友有所帮助!

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视频教程

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

【声明:根据2013年1月30日《计算机软件保护条例》2次修订第17条规定: 为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存 储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬! 鉴于此,也希望大家按此说明研究软件!】
本站所有源码尽量保证原汁原味,如有特殊情况会作出声明及标注,网站资源不做任何二次加密(原版加密除外,不影响程序使用的不会做解密处理),方便您更好的学习参考。 在您的能力范围内,为了大环境的良性发展,请尽可能的选择正版资源。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

即刻码站__国内靠谱的站长资源下载平台 php教程 一文讲解关于Laravel kernel实例化 https://www.jike1995.com/36563.html

常见问题
  • 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度
查看详情

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务