【再読lara】ライフサイクル~コアクラスインスタンス化

1184 ワード

AppHttpKernelクラスをサービスコンテナでインスタンス化する場合、このクラスは$middleware(ミドルウェア)と$routeMiddleware(ルーティングミドルウェア)の2つの配列属性を定義しているだけで、ミドルウェアはルーティング処理に入る前の処理クラスを要求し、ルーティングミドルウェアはルーティング処理に入った後の処理クラスを要求するので、ここでは新しいミドルウェア処理クラスを追加することができます.ミドルウェアの設計原則に従って設計を行い、ミドルウェア配列の正しい位置にクラス名を追加すると、要求の処理中に新しく追加されたミドルウェア処理プロセスが呼び出されます.
Illuminate\Container\Container.php
    /**
     * Register a shared binding in the container.
     *
     * @param  string|array  $abstract
     * @param  \Closure|string|null  $concrete
     * @return void
     */
    public function singleton($abstract, $concrete = null)
    {
        $this->bind($abstract, $concrete, true);
    }


$app->singleton(
    Illuminate\Contracts\Http\Kernel::class,
    App\Http\Kernel::class
);


Illuminate\Foundation\Http\Kernel.php
 //      HTTP     
public function __construct(Application $app, Router $router)
{
        $this->app = $app;
        $this->router = $router;
        foreach ($this->routeMiddleware as $key => $middleware) {
            $router->middleware($key, $middleware);
        }
}


Kernelクラスのコンストラクション関数は依存するIlluminateContractsFoundationApplication IlluminateRoutingRouterです