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\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\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
BootProviders.php
運行所有provider的boot
所以,kernel整個功能就是:
1. 初始化針對網站配置的環境。
2. 添加meddlerware功能
3. 配置router,並把請求發送到router
laravel 核心類Kernel