国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Laravel 請(qǐng)求生命周期

junfeng777 / 1344人閱讀

摘要:應(yīng)用實(shí)例所依賴的服務(wù)提供者可以在配置文件中的節(jié)點(diǎn)找到。完成所有服務(wù)提供者注冊(cè)到應(yīng)用實(shí)例后,應(yīng)用實(shí)例執(zhí)行啟動(dòng)方法引導(dǎo)項(xiàng)目啟動(dòng)。或內(nèi)核接收到請(qǐng)求,加載服務(wù)提供者,同時(shí),將請(qǐng)求分發(fā)給路由器執(zhí)行。

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

當(dāng)需要使用一個(gè)框架、工具或者服務(wù)時(shí),在使用前應(yīng)對(duì)其運(yùn)行原理進(jìn)行研究。隨著原理研究工作的不斷深入,能讓我們?cè)谑褂脮r(shí)更得心應(yīng)手。

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

我們會(huì)帶領(lǐng)大家一步步深入挖掘出這其中的秘密。

自動(dòng)加載

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

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

內(nèi)核

下一步:我們將焦點(diǎn)鎖定到應(yīng)用實(shí)例的內(nèi)核部分。

應(yīng)用實(shí)例根據(jù) HTTP 請(qǐng)求的運(yùn)行環(huán)境,來(lái)決定將請(qǐng)求發(fā)送到 HTTP 內(nèi)核或 Console 內(nèi)核。這兩個(gè)內(nèi)核是所有 HTTP 請(qǐng)求的集散中心。

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

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

服務(wù)提供者

接下來(lái),內(nèi)核會(huì)在引導(dǎo)項(xiàng)目啟動(dòng)時(shí)加載服務(wù)提供者。應(yīng)用實(shí)例所依賴的服務(wù)提供者可以在 config/app.php 配置文件中的 providers 節(jié)點(diǎn)找到。

一個(gè)服務(wù)提供者的 register() 方法被調(diào)用時(shí),這個(gè)服務(wù)提供者即被注冊(cè)到應(yīng)用實(shí)例。完成所有服務(wù)提供者注冊(cè)到應(yīng)用實(shí)例后,應(yīng)用實(shí)例執(zhí)行啟動(dòng)方法(boot method)引導(dǎo)項(xiàng)目啟動(dòng)。

分發(fā)請(qǐng)求

隨著應(yīng)用實(shí)例完成引導(dǎo)、注冊(cè)服務(wù)器提供者和啟動(dòng)等處理,接下來(lái)請(qǐng)求便會(huì)被路由器(Router)轉(zhuǎn)發(fā)。路由器將請(qǐng)求轉(zhuǎn)發(fā)至注冊(cè)的路由和對(duì)應(yīng)的控制器(譯注:在 routes/web.php 或 routes/api.php 文件中定義的路由),并且執(zhí)行當(dāng)前路由相關(guān)的中間件。

路由器

現(xiàn)在到了請(qǐng)求被處理和渲染的環(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 請(qǐng)求發(fā)送到匹配的控制器或視圖。我們可以在 routes/web.php 中(譯注:原文定義在 app/routes.php 中,僅適用于 Laravel 5.3 之前)定義路由。

項(xiàng)目所有的控制器都管理在 app/Https/Controllers(譯注:原文 app/controllers) 目錄中,一個(gè)控制器對(duì)應(yīng)一個(gè)操作,并發(fā)送數(shù)據(jù)到其視圖。

視圖文件被定義在 resources/views 目錄中,功能是輸出數(shù)據(jù)并響應(yīng) HTTP 請(qǐng)求。

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

一個(gè) HTTP 請(qǐng)求實(shí)例 1

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

2

當(dāng)用戶點(diǎn)擊回車按鈕,瀏覽器將頁(yè)面的請(qǐng)求通過(guò)網(wǎng)絡(luò)發(fā)送到 Web 服務(wù)器。

3

Web 服務(wù)器接收請(qǐng)求并解析請(qǐng)求信息。在 Web 服務(wù)器的配置文件中有配置當(dāng)前項(xiàng)目根目錄路徑。由于當(dāng)前訪問(wèn)的 URL 地址不包含子路徑,Web 服務(wù)器會(huì)查找配置文件的 index.php 文件。

4

Web 服務(wù)器將請(qǐng)求發(fā)送到項(xiàng)目的 public/index.php 文件。

5

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

6

之后,Laravel 應(yīng)用實(shí)例被實(shí)例化,同時(shí),引導(dǎo)安裝 laravel 組件。

7

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

8

路由器將渲染視圖文件,并生成響應(yīng)數(shù)據(jù)給 Web 服務(wù)器。

9

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

10

用戶瀏覽器接收到服務(wù)器響應(yīng),渲染頁(yè)面并展現(xiàn)給用戶。

總結(jié)

通過(guò)理解 Laravel 請(qǐng)求生命周期,不僅能夠增加開(kāi)發(fā) Laravel 項(xiàng)目的自信心。還有助于調(diào)試項(xiàng)目、定位和解決 bug。在某些場(chǎng)景下可以快加快速的更總問(wèn)題。

原文:Request Life Cycle of Laravel

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/30718.html

相關(guān)文章

  • 深度挖掘 Laravel 生命周期

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

    arashicage 評(píng)論0 收藏0
  • Laravel學(xué)習(xí):請(qǐng)求到響應(yīng)的生命周期

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

    OBKoro1 評(píng)論0 收藏0
  • 使用 Swoole 加速 Laravel

    摘要:因?yàn)闉閱蝹€(gè)請(qǐng)求創(chuàng)建的環(huán)境將在請(qǐng)求過(guò)程完成后立即銷毀。可以成為強(qiáng)大的性能增強(qiáng)器,提供了優(yōu)雅的結(jié)構(gòu)和代碼使用方式。你可以使用此命令快速安裝它,并訪問(wèn)官方網(wǎng)站獲取更多信息。注意目前僅支持和。服務(wù)器不能使用。基準(zhǔn)測(cè)試使用進(jìn)行干凈的測(cè)試。 Swoole 是針對(duì)PHP的生產(chǎn)級(jí)異步編程框架。它是一種用純C語(yǔ)言編寫(xiě)的PHP擴(kuò)展,它使PHP開(kāi)發(fā)人員能夠在PHP中編寫(xiě)高性能,可擴(kuò)展的并發(fā)TCP,UDP,U...

    didikee 評(píng)論0 收藏0
  • 使用 Swoole 來(lái)加速你的 Laravel 應(yīng)用

    摘要:是為開(kāi)發(fā)的生產(chǎn)級(jí)異步編程框架。因?yàn)閱蝹€(gè)請(qǐng)求創(chuàng)建的環(huán)境在請(qǐng)求執(zhí)行結(jié)束后會(huì)立即銷毀。可以提供強(qiáng)大性能而則可以提供優(yōu)雅代碼結(jié)構(gòu)使用。在使用這個(gè)包之前,請(qǐng)確保你的機(jī)器安裝了正確的。建立并運(yùn)行起來(lái)現(xiàn)在,你可以執(zhí)行以下的命令來(lái)啟動(dòng)服務(wù)。 showImg(https://segmentfault.com/img/bVbaF89?w=1240&h=634); Swoole?是為 PHP 開(kāi)發(fā)的生產(chǎn)級(jí)異...

    snifes 評(píng)論0 收藏0
  • 了解swoole運(yùn)行模式,加速laravel應(yīng)用

    摘要:負(fù)責(zé)解釋執(zhí)行文件生成響應(yīng),最終返回給,展現(xiàn)至前端。相比于傳統(tǒng)架構(gòu),進(jìn)程模型最大的特點(diǎn)在于其多線程模式處理網(wǎng)絡(luò)請(qǐng)求,使得其能輕松應(yīng)對(duì)大量連接。這要求開(kāi)發(fā)人員對(duì)于多進(jìn)程的運(yùn)行模式有更清晰的認(rèn)識(shí)更容易內(nèi)存泄露。 一、SwooleSwoole號(hào)稱重新定義了PHP,它是一個(gè)PHP擴(kuò)展,使得PHP可以使用異步的方式執(zhí)行,就像node一樣,而且還能使用socket,為PHP提供了一系列異步IO、事件...

    時(shí)飛 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<