1. 程式人生 > >laravel 核心類Kernel

laravel 核心類Kernel

gis autoload set 目錄 轉化 support error 設置 alias

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

  BootProviders.php

    運行所有provider的boot

所以,kernel整個功能就是:

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

2. 添加meddlerware功能

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

laravel 核心類Kernel