Rumah > rangka kerja php > Laravel > Artikel yang menerangkan tentang instantiasi kernel Laravel

Artikel yang menerangkan tentang instantiasi kernel Laravel

藏色散人
Lepaskan: 2021-09-06 09:07:29
ke hadapan
1591 orang telah melayarinya

Berikut ialah pengenalan kepada instantiasi kernel Laravel F dari ruangan tutorial Laravel Saya harap ia dapat membantu rakan yang memerlukan!

Inti Instalasi Laravel

$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
Salin selepas log masuk

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 类构造器依赖 \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\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 时通过别名方式直接调用 $this->bindings['events'] 数组里面 concrete 对应的匿名函数
Dispatcher 依赖 \Illuminate\Contracts\Container\Container
public 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)
上面两个一样,没有区别
Salin selepas log masuk

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 make

Mengembalikan 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;
}
Salin selepas log masuk

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;
}
Salin selepas log masuk
Nota:

Objek kernel ialah objek yang menggabungkan aplikasi dan penghalaan, dan penghalaan menyuntik objek IlluminateEventsDispatcher, yang merupakan objek teras.


Cadangan berkaitan:
Lima tutorial video Laravel terbaharu

Atas ialah kandungan terperinci Artikel yang menerangkan tentang instantiasi kernel Laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:segmentfault.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan