程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> 跟我學Laravel之請求(Request)的生命周期

跟我學Laravel之請求(Request)的生命周期

編輯:PHP綜合

概述

在現實世界中使用工具時,如果理解了工具的工作原理,使用起來就會更加有底氣。應用開發也是如此。當你理解了開發工具是如何工作的,使用起來就會更加自如。這篇文檔的目標就是提供一個高層次的概述,使你對於Laravel框架的運行方式有一個較好的把握。在更好地了解了整個框架之後,框架的組件和功能就不再顯得那麼神秘,開發起應用來也更加得心應手。這篇文檔包含了關於請求生命周期的高層次概述,以及啟動文件和應用程序事件的相關內容。

如果你不能立即理解所有的術語,別灰心,可以先有一個大致的把握,在閱讀文檔其他章節的過程中繼續積累和消化知識。

請求的生命周期

發送給應用程序的所有請求都經由 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 事件,如果想在腳本結束前再做一些事情,這是最後的機會。不過在大多數情況下,你都不需要用到這些事件。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved