laravel框架一次請求的生命週期

第一件事全部的請求都會被web服務器(Apache/Nginx)導向public/index.php文件.index.php文件載入Composer生成的自動加載設置,而後從bootstrap/app.php腳本獲取Laravel應用的實例,php

app -> Application實例(Illuminate\Foundation\Application)laravel

Illuminate\Container\Container -> Application實例(Illuminate\Foundation\Application)web

laravel的第一個動做就是建立服務容器實例.數據庫

註冊基本服務提供者並啓動

EventServieProvider —— 事件服務提供者bootstrap

$this->app->singleton('events', function ($app) {
    return (new Dispatcher($app))->setQueueResolver(function () use ($app) {
        return $app->make('Illuminate\Contracts\Queue\Factory');
    });
});

RoutingServiceProvider —— 路由服務提供者數組

public function register()
{
    $this->registerRouter();
    $this->registerUrlGenerator();
    $this->registerRedirector();
    $this->registerPsrRequest();
    $this->registerPsrResponse();
    $this->registerResponseFactory();
}

註冊核心服務容器別名

第1026行方法。Illuminate\Foundation\Application.phpregisterCoreContainerAliases

HTTP/Console 內核接下來,請求被髮送到 HTTP 內核或 Console 內核,這取決於進入應用的請求類型。這兩個內核是全部請求都要通過的中央處理器,讓咱們聚焦在位於 app/Http/Kernel.php 的 HTTP 內核。服務器

HTTP 內核繼承自 Illuminate\Foundation\Http\Kernel 類,它定義了一個 bootstrappers 數組,數組中的類在請求真正執行前進行前置執行。 這些引導程序配置了錯誤處理,日誌記錄,檢測應用程序環境,以及其餘在請求被處理前須要完成的工做。session

HTTP 內核同時定義了一個 HTTP 中間件列表,全部的請求必須在處理前經過這些中間件,這些中間件處理 HTTP session的讀寫,判斷應用是否在維護模式,驗證CSRF token 等等app

HTTP 內核的標誌性 handle 方法是至關簡單的:接收一個 Request 並返回一個 Response。你能夠把內核想成一個表明你應用的大黑盒子。給它喂 HTTP 請求而後它就會吐給你 HTTP 響應。框架

服務提供者

在內核引導啓動的過程當中最重要的動做之一就是載入 服務提供者到你的應用。全部的服務提供者都配置在 config/app.php 文件中的 providers 數組中。 首先,全部提供者的 register 方法會被調用,接下來,一旦全部提供者註冊完成,boot 方法將會被調用.

服務提供者負責引導啓動框架的所有各類組件,例如數據庫、隊列、驗證器以及路由組件。由於這些組件引導和配置了框架的各類功能,因此服務提供者是整個 Laravel 啓動過程當中最爲重要的部分。

分發請求

一旦應用完成引導和全部服務提供者都註冊完成,Request 將會移交給路由進行分發。路由將分發請求給一個路由或控制器,同時運行路由指定的中間件。

聚焦服務提供者

服務提供者是 Laravel 應用的真正關鍵部分,應用實例被建立後,服務提供者就會被註冊完成,並將請求傳遞給應用進行處理,真的就是這麼簡單!

瞭解 Laravel 是怎樣經過服務提供者構建和引導一個穩定的應用是很是有價值的,固然,應用的默認服務提供者都存放在 app/Providers 目錄中。

在新建立的應用中,AppServiceProvider 文件中方法實現都是空的。這個提供者是你添加應用專屬的引導和服務的最佳位置,固然的,對於大型應用你可能但願建立幾個服務提供者,每一個都具備粒度更精細的引導。

相關文章
相關標籤/搜索