成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Laravel 請求生命周期

junfeng777 / 1362人閱讀

摘要:應用實例所依賴的服務提供者可以在配置文件中的節(jié)點找到。完成所有服務提供者注冊到應用實例后,應用實例執(zhí)行啟動方法引導項目啟動?;騼群私邮盏秸埱螅虞d服務提供者,同時,將請求分發(fā)給路由器執(zhí)行。

這是一篇翻譯文章,原文 Request Life Cycle of Laravel,譯文 Laravel 請求生命周期 首發(fā)于個人博客,轉載請注明出處。

當需要使用一個框架、工具或者服務時,在使用前應對其運行原理進行研究。隨著原理研究工作的不斷深入,能讓我們在使用時更得心應手。

這篇文章旨在幫助大家掌握 「Laravel HTTP 請求生命周期」 的工作原理。內容涵蓋當一個 HTTP 請求發(fā)送到 Laravel 服務后,這個請求在項目運行的各個階段是如何被處理的,然后框架又是如何將處理結果發(fā)送回用戶的。

我們會帶領大家一步步深入挖掘出這其中的秘密。

自動加載

第一步,當用戶在瀏覽器訪問 URL 時會發(fā)起一個 HTTP 請求,最終這個請求被發(fā)送到我們的 Web 服務器。Web 服務器(Apache 或 Nginx) 通過匹配的服務配置,再將請求發(fā)送到 Laravel 中的 入口文件 public/index.php,該文件完成項目依賴服務的加載功能。首先它將 composer 生成的自動加載器引入項目(譯注:require __DIR__."/../vendor/autoload.php";)。

然后接收由 bootstrap/app.php 文件創(chuàng)建的應用實例。創(chuàng)建實例的過程即是項目初始化的過程。

內核

下一步:我們將焦點鎖定到應用實例的內核部分。

應用實例根據 HTTP 請求的運行環(huán)境,來決定將請求發(fā)送到 HTTP 內核或 Console 內核。這兩個內核是所有 HTTP 請求的集散中心。

HTTP 內核是定義在 app/Http/Kernel.php 文件內的 Kernel 實現類,它接收一個請求,然后返回一個響應,就是這么簡單。不過,在 Kernel 類的內部有定義諸多的 引導程序(Bootstrappers),這些引導程序會完成錯誤句柄(handle)配置、日志配置、運行環(huán)境識別和所有需要在請求被執(zhí)行前完成的配置工作。

不僅如此,Kernel 類還定義了許多需要在請求被處理前需要被執(zhí)行的中間件。

服務提供者

接下來,內核會在引導項目啟動時加載服務提供者。應用實例所依賴的服務提供者可以在 config/app.php 配置文件中的 providers 節(jié)點找到。

一個服務提供者的 register() 方法被調用時,這個服務提供者即被注冊到應用實例。完成所有服務提供者注冊到應用實例后,應用實例執(zhí)行啟動方法(boot method)引導項目啟動。

分發(fā)請求

隨著應用實例完成引導、注冊服務器提供者和啟動等處理,接下來請求便會被路由器(Router)轉發(fā)。路由器將請求轉發(fā)至注冊的路由和對應的控制器(譯注:在 routes/web.php 或 routes/api.php 文件中定義的路由),并且執(zhí)行當前路由相關的中間件。

路由器

現在到了請求被處理和渲染的環(huán)節(jié):

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 請求發(fā)送到匹配的控制器或視圖。我們可以在 routes/web.php 中(譯注:原文定義在 app/routes.php 中,僅適用于 Laravel 5.3 之前)定義路由。

項目所有的控制器都管理在 app/Https/Controllers(譯注:原文 app/controllers) 目錄中,一個控制器對應一個操作,并發(fā)送數據到其視圖。

視圖文件被定義在 resources/views 目錄中,功能是輸出數據并響應 HTTP 請求。

下面的執(zhí)行流程圖詳細描述了上述步驟的執(zhí)行過程:

一個 HTTP 請求實例 1

用戶在瀏覽器輸入 http://xyz.com 并點擊回車按鈕。

2

當用戶點擊回車按鈕,瀏覽器將頁面的請求通過網絡發(fā)送到 Web 服務器。

3

Web 服務器接收請求并解析請求信息。在 Web 服務器的配置文件中有配置當前項目根目錄路徑。由于當前訪問的 URL 地址不包含子路徑,Web 服務器會查找配置文件的 index.php 文件。

4

Web 服務器將請求發(fā)送到項目的 public/index.php 文件。

5

PHP 解釋器接收到請求后,解釋執(zhí)行 index.php 文件中的 PHP 代碼。此時,由 Componser 包管理器生成的自動加載文件被加載。

6

之后,Laravel 應用實例被實例化,同時,引導安裝 laravel 組件。

7

HTTP 或 Console 內核接收到 HTTP 請求,加載 Laravel 服務提供者,同時,將請求分發(fā)給路由器執(zhí)行。

8

路由器將渲染視圖文件,并生成響應數據給 Web 服務器。

9

Web 服務器接收到 PHP 的輸出結果,并將結果返回給用戶瀏覽器。

10

用戶瀏覽器接收到服務器響應,渲染頁面并展現給用戶。

總結

通過理解 Laravel 請求生命周期,不僅能夠增加開發(fā) Laravel 項目的自信心。還有助于調試項目、定位和解決 bug。在某些場景下可以快加快速的更總問題。

原文:Request Life Cycle of Laravel

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/30718.html

相關文章

  • 深度挖掘 Laravel 生命周期

    摘要:引導程序包括完成環(huán)境檢測配置加載異常處理注冊服務提供者注冊啟動服務這六個引導程序。處理請求請求處理發(fā)生在內核的方法內。發(fā)送響應頭部信息發(fā)送報文主題終止程序程序終止,完成終止中間件的調用終止中間件以上便是的請求生命周期的始末。 本文首發(fā)于個人博客 深度挖掘 Laravel 生命周期,轉載請注明出處。 這篇文章我們來聊聊 「Laravel 生命周期」 這個主題。雖然網絡上已經有很多關于這個...

    arashicage 評論0 收藏0
  • Laravel學習:請求到響應的生命周期

    摘要:請求處理階段請求處理階段首先是準備請求處理的環(huán)境,包括環(huán)境加載服務提供者注冊等環(huán)節(jié),然后將請求實例通過中間件處理及通過路由和控制器的分發(fā)控制,使得不同的請求通過相應的處理程序進行處理并生成響應的過程。 Laravel請求到響應的整個執(zhí)行過程,主要可以歸納為四個階段,即程序啟動準備階段、請求實例化階段、請求處理階段、響應發(fā)送和程序終止階段。 程序啟動準備階段 服務容器實例化 服務容器的實...

    OBKoro1 評論0 收藏0
  • 使用 Swoole 加速 Laravel

    摘要:因為為單個請求創(chuàng)建的環(huán)境將在請求過程完成后立即銷毀。可以成為強大的性能增強器,提供了優(yōu)雅的結構和代碼使用方式。你可以使用此命令快速安裝它,并訪問官方網站獲取更多信息。注意目前僅支持和。服務器不能使用?;鶞蕼y試使用進行干凈的測試。 Swoole 是針對PHP的生產級異步編程框架。它是一種用純C語言編寫的PHP擴展,它使PHP開發(fā)人員能夠在PHP中編寫高性能,可擴展的并發(fā)TCP,UDP,U...

    didikee 評論0 收藏0
  • 使用 Swoole 來加速你的 Laravel 應用

    摘要:是為開發(fā)的生產級異步編程框架。因為單個請求創(chuàng)建的環(huán)境在請求執(zhí)行結束后會立即銷毀??梢蕴峁姶笮阅芏鴦t可以提供優(yōu)雅代碼結構使用。在使用這個包之前,請確保你的機器安裝了正確的。建立并運行起來現在,你可以執(zhí)行以下的命令來啟動服務。 showImg(https://segmentfault.com/img/bVbaF89?w=1240&h=634); Swoole?是為 PHP 開發(fā)的生產級異...

    snifes 評論0 收藏0
  • 了解swoole運行模式,加速laravel應用

    摘要:負責解釋執(zhí)行文件生成響應,最終返回給,展現至前端。相比于傳統架構,進程模型最大的特點在于其多線程模式處理網絡請求,使得其能輕松應對大量連接。這要求開發(fā)人員對于多進程的運行模式有更清晰的認識更容易內存泄露。 一、SwooleSwoole號稱重新定義了PHP,它是一個PHP擴展,使得PHP可以使用異步的方式執(zhí)行,就像node一樣,而且還能使用socket,為PHP提供了一系列異步IO、事件...

    時飛 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<