laravel 核心類Kernel


vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php。是laravel處理網絡請求的最核心類,在app容器准備好了之后,就會調用本類,之后所有的處理都在此類中。

 

 初始化

  1. 調用router,因為router已經中app中注冊,所以,直接make就行。

  2. 添加middleware,首先添加如下默認的middleware:

                $middlewarePriority = [
                \Illuminate\Session\Middleware\StartSession::class,
                \Illuminate\View\Middleware\ShareErrorsFromSession::class,
                \Illuminate\Auth\Middleware\Authenticate::class,
                \Illuminate\Session\Middleware\AuthenticateSession::class,
                \Illuminate\Routing\Middleware\SubstituteBindings::class,
                \Illuminate\Auth\Middleware\Authorize::class,
            ];

 3. 添加其他的middlerware,進router,所有middleware以及middlewaregroup都加到router中。

 

處理request,通過handler函數處理

1. 處理前需要的類初始化,bootstrap

2. 把傳入的request送到middleware,然后傳遞到router。處理結束。

 

 

 bootstrap,調用app的bootstrapWith初始化整個請求需要的的環境:

    bootarp: 啟動的時候需要實例化並運行的類

            \Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables::class,
            \Illuminate\Foundation\Bootstrap\LoadConfiguration::class,
            \Illuminate\Foundation\Bootstrap\HandleExceptions::class,
            \Illuminate\Foundation\Bootstrap\RegisterFacades::class,
            \Illuminate\Foundation\Bootstrap\SetRequestForConsole::class,
            \Illuminate\Foundation\Bootstrap\RegisterProviders::class,
            \Illuminate\Foundation\Bootstrap\BootProviders::class,

     LoadEnvironmentVariables
    初始化環境變量文件(根目錄下的.env文件),具體加載那幾個文件,取決於幾個條件:1.環境變量文件夾的路徑設置(在app中設置) 2.控制台可以用—env參數,非控制台用APP_ENV環境變量,決定文件的后綴

    設置是通過 vendor/vlucas/phpdotenv/src/Dotenv.php加載到環境變量中:
    $_ENV[$name] = $value;
          $_SERVER[$name] = $value;

  LoadConfiguration.php

    添加config 實例,並且讀取config文件夾下的所有文件,初始化對象,注入到容器中,后續就可以直接用config簡稱調用了。

 

  HandleExceptions.php

    異常和錯誤處理,錯誤都轉化成異常,異常調用容器中注冊的ExceptionHandler來處理。

           注冊用的系統函數:
          set_error_handler([$this, 'handleError']);
          set_exception_handler([$this, 'handleException']);

 

  RegisterFacades.php

           把配置文件app里面的app.aliases注冊成門面

    注冊是通過類:vendor/laravel/framework/src/Illuminate/Foundation/AliasLoader.php

     這冊門面是用php的spl_autoload_register實現的注冊自動加載函數,而自動加載函數調用class_alias將別名跟實際類綁定實現。實際類都繼承自門面類

    vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php

    門面類的作用,直接調用容器中的綁定,生成相應的類實例,並且通過類的實例,調用相應的方法。

    所以,門面類,功能就是把容器中的類,提供了一個直接訪問的別名,其實跟容器中的別名沒有太大區別,只是把訪問方式變了而已。

 

  RegisterProviders.php

    直接調用app中的registerConfiguredProviders,注冊app配置文件中的providers,同時注冊PackageManifest中的providers。

 

  BootProviders.php

    運行所有provider的boot

 

所以,kernel整個功能就是:

1. 初始化針對網站配置的環境。

2. 添加meddlerware功能

3. 配置router,並把請求發送到router


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM