成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Laravel 請求生命周期

junfeng777 / 1407人閱讀

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

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

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

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

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

自動加載

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

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

內(nèi)核

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

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

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

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

服務(wù)提供者

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

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

分發(fā)請求

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

路由器

現(xiàn)在到了請求被處理和渲染的環(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 之前)定義路由。

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

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

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

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

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

2

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

3

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

4

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

5

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

6

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

7

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

8

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

9

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

10

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

總結(jié)

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

原文:Request Life Cycle of Laravel

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

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

相關(guān)文章

  • 深度挖掘 Laravel 生命周期

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

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

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

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

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

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

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

    snifes 評論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ò)請求,使得其能輕松應(yīng)對大量連接。這要求開發(fā)人員對于多進(jìn)程的運(yùn)行模式有更清晰的認(rèn)識更容易內(nèi)存泄露。 一、SwooleSwoole號稱重新定義了PHP,它是一個(gè)PHP擴(kuò)展,使得PHP可以使用異步的方式執(zhí)行,就像node一樣,而且還能使用socket,為PHP提供了一系列異步IO、事件...

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

發(fā)表評論

0條評論

閱讀需要支付1元查看
<