您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關Laravel中Request的生命周期有哪些,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
請求的生命周期
發送給應用程序的所有請求都經由 public/index.php 腳本處理。如果使用的是 Apache 服務器,Laravel中包含的 .htaccess 文件將對所有請求進行處理并傳遞給 index.php。這是Laravel從接受客戶端請求到返回響應給客戶端的整個過程的開始。若能對于Laravel的引導過程(bootstrap process)有一個大致的認識,將有助于理解框架,我們不妨先討論這個。
到目前為止,學習Laravel引導過程所需掌握的最重要的概念就是 服務提供器。打開 app/config/app.php 配置文件,找到 providers 數組,你會發現一個服務提供器的列表。這些提供器充當了Laravel的主要引導機制。在我們深入服務提供器之前,先回到 index.php的討論。當一個請求進入 index.php 文件,bootstrap/start.php 文件會被加載。這個文件會創建一個 Laravel Application 對象,該對象同時作為框架的 IoC 容器。
Application 對象創建完成后,框架會設置一些路徑信息并運行 環境檢測 。然后會執行位于Laravel源碼內部的引導腳本,并根據你的配置文件設置時區、錯誤報告等其他信息。除了配置這些瑣碎的配置選項以外,該腳本還會做一件非常重要的事情:注冊所有為應用程序配置的服務提供器。
簡單的服務提供器只包含一個方法:register。當應用程序對象通過自身的 register 方法注冊某個服務提供器時,會調用該服務提供器的 register 方法。服務提供器通過這個方法向 IoC 容器 注冊一些東西。從本質上講,每個服務提供器都是將一個或多個 閉包 綁定到容器中,你可以通過這些閉包訪問綁定到應用程序的服務。例如,QueueServiceProvider 注冊了多個閉包以便使用與 隊列 相關的多個類。當然,服務提供器并不局限于向IoC容器注冊內容,而是可以用于任何引導性質的任務。服務提供器可以注冊事件監聽器、視圖合成器、Artisan命令等等。
在注冊完所有服務提供器后,app/start 下的文件會被加載。最后,app/routes.php 文件會被加載。一旦 routes.php 文件被加載,Request 對象就被發送給應用程序對象,繼而被派發到某個路由上。
我們總結一下:
請求進入 public/index.php 文件。
bootstrap/start.php 文件創建應用程序對象并檢測環境。
內部的 framework/start.php 文件配置相關設置并加載服務提供器。
加載應用程序 app/start 目錄下的文件。
加載應用程序的 app/routes.php 文件。
將 Request 對象發送給應用程序對象,應用程序對象返回一個 Response 對象。
將 Response 對象發回客戶端。
你應該已經掌握了 Laravel 應用程序是如何處理發來的請求的。下面我們來看一下啟動文件。
啟動文件
應用程序的啟動文件被存放在app/start目錄中。默認情況下,該目錄下包含三個文件:global.php、local.php 和 artisan.php文件。需要獲取更多關于artisan.php的信息,可以參考文檔Artisan 命令行。
global.php啟動文件默認包含一些基本項目,例如日志的注冊以及載入app/filters.php 文件。然而,你可以在該文件里做任何你想做的事情。無論在什么環境下,它都將會被自動包含進_每一個_request中。而local.php 文件僅在local環境下被執行。獲取更多關于環境的信息,請查看文檔配置。
當然,如果除了local環境你還有其他環境的話,你也可以為針對這些環境創建啟動文件。這些文件將在應用程序運行在該環境中時被自動包含。假設你在 bootstrap/start.php 文件中配置了一個 development 環境,你可以創建一個 app/start/development.php 文件,在那個環境下任何進入應用程序的請求都會包含該文件。
啟動文件里存放什么
啟動文件主要用來存放任何“引導”性質的代碼。例如,你可以在啟動文件中注冊視圖合成器,配置日志信息,或是進行一些PHP設置等。具體做什么取決于你。當然了,把所有引導代碼都丟到啟動文件里會使啟動文件變得雜亂。對于大型應用而言,或是啟動文件顯得太雜亂了,請考慮將某些引導代碼移至 服務提供器 中。
應用程序事件
你還可以通過注冊 before、after、finish 和 shutdown應用程序事件以便在處理request之前或后做一些操作:
注冊應用程序事件
復制代碼 代碼如下:
App::before(function($request)
{
//
});
App::after(function($request, $response)
{
//
});
這些事件的監聽器會在每個到達應用程序的請求處理之前(before)或之后(after)運行。可以利用這些事件來設置全局過濾器(filter),或是對于發回客戶端的響應(response)統一進行修改。你可以在某個啟動文件中或者 服務提供器 中注冊這些事件。
當來自應用程序的響應發送至客戶端后會觸發 finish 事件。這個事件適合處理應用程序所需的最后的收尾工作。當所有 finish 事件的監聽器都執行完畢后會立即觸發 shutdown 事件,如果想在腳本結束前再做一些事情,這是最后的機會。不過在大多數情況下,你都不需要用到這些事件。
看完上述內容,你們對Laravel中Request的生命周期有哪些有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。