摘要:請(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í)例化和基本注冊(cè),包括了服務(wù)容器本身注冊(cè)、基礎(chǔ)服務(wù)提供者注冊(cè)、核心類別名注冊(cè)和應(yīng)用的基本路徑注冊(cè)。注冊(cè)的服務(wù)只是具體的類名,是通過(guò)反射機(jī)制來(lái)實(shí)例化對(duì)象,并且通過(guò)反射機(jī)制自動(dòng)解決構(gòu)造函數(shù)中的依賴關(guān)系。
核心類實(shí)例化
核心類實(shí)例化是服務(wù)容器實(shí)例化后,通過(guò)核心類別名注冊(cè)服務(wù)來(lái)得到的服務(wù)容器自動(dòng)實(shí)例化對(duì)象。如:index.php中的Kernel類實(shí)例化:
$kernel = $app->make(IlluminateContractsHttpKernel::class);請(qǐng)求實(shí)例化階段
請(qǐng)求是客戶端發(fā)送的一個(gè)請(qǐng)求報(bào)文,包括請(qǐng)求行、請(qǐng)求首部和請(qǐng)求實(shí)體。Laravel將其分類并保存在IlluminateHttpRequest類的實(shí)例對(duì)象中,也就是說(shuō)將請(qǐng)求轉(zhuǎn)化為一個(gè)實(shí)例對(duì)象。請(qǐng)求實(shí)例的創(chuàng)建是通過(guò)IlluminateHttpRequest類的capture()靜態(tài)方法完成的,即:
$request = IlluminateHttpRequest::capture();
但在capture()方法中,可以看出Laravel的請(qǐng)求實(shí)例是在Symfony請(qǐng)求實(shí)例的基礎(chǔ)上創(chuàng)建的。而Symfony是通過(guò)PHP的全局?jǐn)?shù)組$_GET、$_POST、$_COOKIE、$_FILE和$_SERVER作為參數(shù)來(lái)實(shí)例化請(qǐ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ò)程。
響應(yīng)發(fā)送和程序終止階段響應(yīng)發(fā)送
Laravel的響應(yīng)處理類是IlluminateHttpResponse類,該類的底層也是在Symfony的Response類。響應(yīng)的發(fā)送包括兩部分內(nèi)容:響應(yīng)頭信息的發(fā)送和響應(yīng)主體內(nèi)容的發(fā)送。
程序終止
Laravel中,終止程序主要是完成終止中間件的調(diào)用。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/29139.html
摘要:引導(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è)...
摘要:應(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í),在使用前...
摘要:劃下重點(diǎn),服務(wù)容器是用于管理類的依賴和執(zhí)行依賴注入的工具。類的實(shí)例化及其依賴的注入,完全由服務(wù)容器自動(dòng)的去完成。 本文首發(fā)于 深入剖析 Laravel 服務(wù)容器,轉(zhuǎn)載請(qǐng)注明出處。喜歡的朋友不要吝嗇你們的贊同,謝謝。 之前在 深度挖掘 Laravel 生命周期 一文中,我們有去探究 Laravel 究竟是如何接收 HTTP 請(qǐng)求,又是如何生成響應(yīng)并最終呈現(xiàn)給用戶的工作原理。 本章將帶領(lǐ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è)置請(qǐng)求是唯一區(qū)別于內(nèi)核的一個(gè)引導(dǎo)程序。和命令行腳本的規(guī)范一樣,如果執(zhí)行命令任務(wù)程序成功會(huì)返回拋出異常退出則返回。嚴(yán)格遵循了面向?qū)ο蟪绦蛟O(shè)計(jì)的原則。 Console內(nèi)核 上一篇文章我們介紹了Laravel的HTTP內(nèi)核,詳細(xì)概述了網(wǎng)絡(luò)請(qǐng)求從進(jìn)入應(yīng)用到應(yīng)用處理完請(qǐng)求返回HTTP響應(yīng)整個(gè)生命周期中HTTP內(nèi)核是如何調(diào)動(dòng)Laravel各個(gè)核心組件來(lái)完成任務(wù)的。除了處理HTTP請(qǐng)求一個(gè)健壯...
閱讀 2651·2021-11-19 09:56
閱讀 921·2021-09-24 10:25
閱讀 1707·2021-09-09 09:34
閱讀 2245·2021-09-09 09:33
閱讀 1082·2019-08-30 15:54
閱讀 595·2019-08-29 18:33
閱讀 1297·2019-08-29 17:19
閱讀 533·2019-08-29 14:19