溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Laravel中Request的生命周期有哪些

發(fā)布時間:2021-07-19 14:14:27 來源:億速云 閱讀:116 作者:Leah 欄目:開發(fā)技術

今天就跟大家聊聊有關Laravel中Request的生命周期有哪些,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

請求的生命周期

發(fā)送給應用程序的所有請求都經(jīng)由 public/index.php 腳本處理。如果使用的是 Apache 服務器,Laravel中包含的 .htaccess 文件將對所有請求進行處理并傳遞給 index.php。這是Laravel從接受客戶端請求到返回響應給客戶端的整個過程的開始。若能對于Laravel的引導過程(bootstrap process)有一個大致的認識,將有助于理解框架,我們不妨先討論這個。

到目前為止,學習Laravel引導過程所需掌握的最重要的概念就是 服務提供器。打開 app/config/app.php 配置文件,找到 providers 數(shù)組,你會發(fā)現(xiàn)一個服務提供器的列表。這些提供器充當了Laravel的主要引導機制。在我們深入服務提供器之前,先回到 index.php的討論。當一個請求進入 index.php 文件,bootstrap/start.php 文件會被加載。這個文件會創(chuàng)建一個 Laravel Application 對象,該對象同時作為框架的 IoC 容器。

Application 對象創(chuàng)建完成后,框架會設置一些路徑信息并運行 環(huán)境檢測 。然后會執(zhí)行位于Laravel源碼內(nèi)部的引導腳本,并根據(jù)你的配置文件設置時區(qū)、錯誤報告等其他信息。除了配置這些瑣碎的配置選項以外,該腳本還會做一件非常重要的事情:注冊所有為應用程序配置的服務提供器。

簡單的服務提供器只包含一個方法:register。當應用程序對象通過自身的 register 方法注冊某個服務提供器時,會調用該服務提供器的 register 方法。服務提供器通過這個方法向 IoC 容器 注冊一些東西。從本質上講,每個服務提供器都是將一個或多個 閉包 綁定到容器中,你可以通過這些閉包訪問綁定到應用程序的服務。例如,QueueServiceProvider 注冊了多個閉包以便使用與 隊列 相關的多個類。當然,服務提供器并不局限于向IoC容器注冊內(nèi)容,而是可以用于任何引導性質的任務。服務提供器可以注冊事件監(jiān)聽器、視圖合成器、Artisan命令等等。

在注冊完所有服務提供器后,app/start 下的文件會被加載。最后,app/routes.php 文件會被加載。一旦 routes.php 文件被加載,Request 對象就被發(fā)送給應用程序對象,繼而被派發(fā)到某個路由上。

我們總結一下:

請求進入 public/index.php 文件。
bootstrap/start.php 文件創(chuàng)建應用程序對象并檢測環(huán)境。
內(nèi)部的 framework/start.php 文件配置相關設置并加載服務提供器。
加載應用程序 app/start 目錄下的文件。
加載應用程序的 app/routes.php 文件。
將 Request 對象發(fā)送給應用程序對象,應用程序對象返回一個 Response 對象。
將 Response 對象發(fā)回客戶端。
你應該已經(jīng)掌握了 Laravel 應用程序是如何處理發(fā)來的請求的。下面我們來看一下啟動文件。

啟動文件

應用程序的啟動文件被存放在app/start目錄中。默認情況下,該目錄下包含三個文件:global.php、local.php 和 artisan.php文件。需要獲取更多關于artisan.php的信息,可以參考文檔Artisan 命令行。

global.php啟動文件默認包含一些基本項目,例如日志的注冊以及載入app/filters.php 文件。然而,你可以在該文件里做任何你想做的事情。無論在什么環(huán)境下,它都將會被自動包含進_每一個_request中。而local.php 文件僅在local環(huán)境下被執(zhí)行。獲取更多關于環(huán)境的信息,請查看文檔配置。

當然,如果除了local環(huán)境你還有其他環(huán)境的話,你也可以為針對這些環(huán)境創(chuàng)建啟動文件。這些文件將在應用程序運行在該環(huán)境中時被自動包含。假設你在 bootstrap/start.php 文件中配置了一個 development 環(huán)境,你可以創(chuàng)建一個 app/start/development.php 文件,在那個環(huán)境下任何進入應用程序的請求都會包含該文件。

啟動文件里存放什么

啟動文件主要用來存放任何“引導”性質的代碼。例如,你可以在啟動文件中注冊視圖合成器,配置日志信息,或是進行一些PHP設置等。具體做什么取決于你。當然了,把所有引導代碼都丟到啟動文件里會使啟動文件變得雜亂。對于大型應用而言,或是啟動文件顯得太雜亂了,請考慮將某些引導代碼移至 服務提供器 中。

應用程序事件

你還可以通過注冊 before、after、finish 和 shutdown應用程序事件以便在處理request之前或后做一些操作:

注冊應用程序事件

復制代碼 代碼如下:


App::before(function($request)
{
    //
});

App::after(function($request, $response)
{
    //
});

這些事件的監(jiān)聽器會在每個到達應用程序的請求處理之前(before)或之后(after)運行??梢岳眠@些事件來設置全局過濾器(filter),或是對于發(fā)回客戶端的響應(response)統(tǒng)一進行修改。你可以在某個啟動文件中或者 服務提供器 中注冊這些事件。

當來自應用程序的響應發(fā)送至客戶端后會觸發(fā) finish 事件。這個事件適合處理應用程序所需的最后的收尾工作。當所有 finish 事件的監(jiān)聽器都執(zhí)行完畢后會立即觸發(fā) shutdown 事件,如果想在腳本結束前再做一些事情,這是最后的機會。不過在大多數(shù)情況下,你都不需要用到這些事件。

看完上述內(nèi)容,你們對Laravel中Request的生命周期有哪些有進一步的了解嗎?如果還想了解更多知識或者相關內(nèi)容,請關注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI