$kernel?=?$app->make(Illuminate\Contracts\Http\Kernel::class);
Inti Instalasi
Apabila aplikasi dijalankan, banyak asas telah dimulakan operasi, jadi pembina berikut akan terus menggunakan suntikan kebergantungan bekas perkhidmatan untuk menyelesaikan kebergantungan antara kelas.
//?\Illuminate\Contracts\Http\Kernel?類構(gòu)造器依賴?\Illuminate\Contracts\Foundation\Application?和?\Illuminate\Routing\Router,將會(huì)通過服務(wù)容器來處理依賴關(guān)系 public?function?__construct(Application?$app,?Router?$router) { ????$this->app?=?$app; ????//?主要委托?$router?來處理 ????$this->router?=?$router; ????//?以下均為中間件的設(shè)置 ????$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?時(shí)通過別名方式直接調(diào)用?$this->instances['app'] \Illuminate\Routing\Router?的處理: make?時(shí)通過別名方式直接調(diào)用?$this->bindings['router']?數(shù)組里面?concrete?對應(yīng)的匿名函數(shù) Router?依賴?\Illuminate\Contracts\Events\Dispatcher?和?\Illuminate\Container\Container public?function?__construct(Dispatcher?$events,?Container?$container?=?null) { ????$this->events?=?$events; ????$this->routes?=?new?RouteCollection; ????$this->container?=?$container??:?new?Container; } \Illuminate\Contracts\Events\Dispatcher?的處理: make?時(shí)通過別名方式直接調(diào)用?$this->bindings['events']?數(shù)組里面?concrete?對應(yīng)的匿名函數(shù) Dispatcher?依賴?\Illuminate\Contracts\Container\Container public?function?__construct(ContainerContract?$container?=?null) { ????$this->container?=?$container??:?new?Container; } \Illuminate\Container\Container?的處理: make?時(shí)直接調(diào)用?$this->instances['Illuminate\Container\Container']?=?Object(app) \Illuminate\Contracts\Container\Container?的處理: make?時(shí)調(diào)用別名直接調(diào)用?$this->instances['app']?=?Object(app) 上面兩個(gè)一樣,沒有區(qū)別
Nota: Kebergantungan yang disenaraikan di atas semuanya diamanahkan terus kepada bekas perkhidmatan untuk pemprosesan automatik Tidak perlu risau tentang $this- >bindings['router'] dan $ pemprosesan acara mengikat ini->bindings['events'], fungsi tanpa nama yang sepadan dengan konkrit kunci tatasusunan akan dipanggil terus semasa membuat.
Coretan kod yang digunakan dalam makeMengembalikan objek Penghala dan menetapkan semula $this->instances['router'] = $objek penghala untuk kali seterusnya Panggil terus.
############################################## 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\Router public?function?__construct(Dispatcher?$events,?Container?$container?=?null) { ????$this->events?=?$events; ????$this->routes?=?new?RouteCollection; ????$this->container?=?$container??:?new?Container; }
Mengembalikan objek Penghantar dan menetapkan semula $this->instances['events'] = $objek penghantar untuk panggilan terus seterusnya.
$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; }Nota:
Objek kernel ialah objek yang menggabungkan aplikasi dan penghalaan, dan penghalaan menyuntik objek IlluminateEventsDispatcher, yang merupakan objek teras.