摘要:應用實例所依賴的服務提供者可以在配置文件中的節點找到。完成所有服務提供者注冊到應用實例后,應用實例執行啟動方法引導項目啟動。或內核接收到請求,加載服務提供者,同時,將請求分發給路由器執行。
這是一篇翻譯文章,原文 Request Life Cycle of Laravel,譯文 Laravel 請求生命周期 首發于個人博客,轉載請注明出處。
當需要使用一個框架、工具或者服務時,在使用前應對其運行原理進行研究。隨著原理研究工作的不斷深入,能讓我們在使用時更得心應手。
這篇文章旨在幫助大家掌握 「Laravel HTTP 請求生命周期」 的工作原理。內容涵蓋當一個 HTTP 請求發送到 Laravel 服務后,這個請求在項目運行的各個階段是如何被處理的,然后框架又是如何將處理結果發送回用戶的。
我們會帶領大家一步步深入挖掘出這其中的秘密。
自動加載第一步,當用戶在瀏覽器訪問 URL 時會發起一個 HTTP 請求,最終這個請求被發送到我們的 Web 服務器。Web 服務器(Apache 或 Nginx) 通過匹配的服務配置,再將請求發送到 Laravel 中的 入口文件 public/index.php,該文件完成項目依賴服務的加載功能。首先它將 composer 生成的自動加載器引入項目(譯注:require __DIR__."/../vendor/autoload.php";)。
然后接收由 bootstrap/app.php 文件創建的應用實例。創建實例的過程即是項目初始化的過程。
內核下一步:我們將焦點鎖定到應用實例的內核部分。
應用實例根據 HTTP 請求的運行環境,來決定將請求發送到 HTTP 內核或 Console 內核。這兩個內核是所有 HTTP 請求的集散中心。
HTTP 內核是定義在 app/Http/Kernel.php 文件內的 Kernel 實現類,它接收一個請求,然后返回一個響應,就是這么簡單。不過,在 Kernel 類的內部有定義諸多的 引導程序(Bootstrappers),這些引導程序會完成錯誤句柄(handle)配置、日志配置、運行環境識別和所有需要在請求被執行前完成的配置工作。
不僅如此,Kernel 類還定義了許多需要在請求被處理前需要被執行的中間件。
服務提供者接下來,內核會在引導項目啟動時加載服務提供者。應用實例所依賴的服務提供者可以在 config/app.php 配置文件中的 providers 節點找到。
一個服務提供者的 register() 方法被調用時,這個服務提供者即被注冊到應用實例。完成所有服務提供者注冊到應用實例后,應用實例執行啟動方法(boot method)引導項目啟動。
分發請求隨著應用實例完成引導、注冊服務器提供者和啟動等處理,接下來請求便會被路由器(Router)轉發。路由器將請求轉發至注冊的路由和對應的控制器(譯注:在 routes/web.php 或 routes/api.php 文件中定義的路由),并且執行當前路由相關的中間件。
路由器現在到了請求被處理和渲染的環節:
Router will direct the HTTP Request to a Controller or return a view or responses directly by omitting the controller. These routes will be placed in app/routes.php.
路由器把 HTTP 請求發送到匹配的控制器或視圖。我們可以在 routes/web.php 中(譯注:原文定義在 app/routes.php 中,僅適用于 Laravel 5.3 之前)定義路由。
項目所有的控制器都管理在 app/Https/Controllers(譯注:原文 app/controllers) 目錄中,一個控制器對應一個操作,并發送數據到其視圖。
視圖文件被定義在 resources/views 目錄中,功能是輸出數據并響應 HTTP 請求。
下面的執行流程圖詳細描述了上述步驟的執行過程:
一個 HTTP 請求實例 1用戶在瀏覽器輸入 http://xyz.com 并點擊回車按鈕。
2當用戶點擊回車按鈕,瀏覽器將頁面的請求通過網絡發送到 Web 服務器。
3Web 服務器接收請求并解析請求信息。在 Web 服務器的配置文件中有配置當前項目根目錄路徑。由于當前訪問的 URL 地址不包含子路徑,Web 服務器會查找配置文件的 index.php 文件。
4Web 服務器將請求發送到項目的 public/index.php 文件。
5PHP 解釋器接收到請求后,解釋執行 index.php 文件中的 PHP 代碼。此時,由 Componser 包管理器生成的自動加載文件被加載。
6之后,Laravel 應用實例被實例化,同時,引導安裝 laravel 組件。
7HTTP 或 Console 內核接收到 HTTP 請求,加載 Laravel 服務提供者,同時,將請求分發給路由器執行。
8路由器將渲染視圖文件,并生成響應數據給 Web 服務器。
9Web 服務器接收到 PHP 的輸出結果,并將結果返回給用戶瀏覽器。
10用戶瀏覽器接收到服務器響應,渲染頁面并展現給用戶。
總結通過理解 Laravel 請求生命周期,不僅能夠增加開發 Laravel 項目的自信心。還有助于調試項目、定位和解決 bug。在某些場景下可以快加快速的更總問題。
原文:Request Life Cycle of Laravel
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30718.html
摘要:引導程序包括完成環境檢測配置加載異常處理注冊服務提供者注冊啟動服務這六個引導程序。處理請求請求處理發生在內核的方法內。發送響應頭部信息發送報文主題終止程序程序終止,完成終止中間件的調用終止中間件以上便是的請求生命周期的始末。 本文首發于個人博客 深度挖掘 Laravel 生命周期,轉載請注明出處。 這篇文章我們來聊聊 「Laravel 生命周期」 這個主題。雖然網絡上已經有很多關于這個...
摘要:請求處理階段請求處理階段首先是準備請求處理的環境,包括環境加載服務提供者注冊等環節,然后將請求實例通過中間件處理及通過路由和控制器的分發控制,使得不同的請求通過相應的處理程序進行處理并生成響應的過程。 Laravel請求到響應的整個執行過程,主要可以歸納為四個階段,即程序啟動準備階段、請求實例化階段、請求處理階段、響應發送和程序終止階段。 程序啟動準備階段 服務容器實例化 服務容器的實...
摘要:因為為單個請求創建的環境將在請求過程完成后立即銷毀。可以成為強大的性能增強器,提供了優雅的結構和代碼使用方式。你可以使用此命令快速安裝它,并訪問官方網站獲取更多信息。注意目前僅支持和。服務器不能使用。基準測試使用進行干凈的測試。 Swoole 是針對PHP的生產級異步編程框架。它是一種用純C語言編寫的PHP擴展,它使PHP開發人員能夠在PHP中編寫高性能,可擴展的并發TCP,UDP,U...
摘要:是為開發的生產級異步編程框架。因為單個請求創建的環境在請求執行結束后會立即銷毀。可以提供強大性能而則可以提供優雅代碼結構使用。在使用這個包之前,請確保你的機器安裝了正確的。建立并運行起來現在,你可以執行以下的命令來啟動服務。 showImg(https://segmentfault.com/img/bVbaF89?w=1240&h=634); Swoole?是為 PHP 開發的生產級異...
摘要:負責解釋執行文件生成響應,最終返回給,展現至前端。相比于傳統架構,進程模型最大的特點在于其多線程模式處理網絡請求,使得其能輕松應對大量連接。這要求開發人員對于多進程的運行模式有更清晰的認識更容易內存泄露。 一、SwooleSwoole號稱重新定義了PHP,它是一個PHP擴展,使得PHP可以使用異步的方式執行,就像node一樣,而且還能使用socket,為PHP提供了一系列異步IO、事件...
閱讀 3236·2021-11-24 09:39
閱讀 2912·2021-09-09 11:34
閱讀 3189·2021-09-07 09:58
閱讀 2299·2019-08-30 13:07
閱讀 2859·2019-08-29 15:09
閱讀 1560·2019-08-29 13:01
閱讀 2300·2019-08-26 12:18
閱讀 1911·2019-08-26 10:28