摘要:發(fā)送響應(yīng)發(fā)送響應(yīng)頭發(fā)送響應(yīng)體發(fā)送到客戶端若是模式,則結(jié)束客戶端響應(yīng)后異步執(zhí)行服務(wù)器端的后續(xù)任務(wù),例如中間件的方法和事件等后續(xù)動(dòng)作執(zhí)行中間件的方法和事件等至此,框架核心流程全部走完
Laravel 發(fā)送響應(yīng)
public function send() { $this->sendHeaders(); $this->sendContent(); if (function_exists("fastcgi_finish_request")) { fastcgi_finish_request(); } elseif ("cli" !== PHP_SAPI) { static::closeOutputBuffers(0, true); } return $this; }發(fā)送響應(yīng)頭
public function sendHeaders() { if (headers_sent()) { return $this; } if (!$this->headers->has("Date")) { $this->setDate(DateTime::createFromFormat("U", time())); } foreach ($this->headers->allPreserveCase() as $name => $values) { foreach ($values as $value) { header($name.": ".$value, false, $this->statusCode); } } header(sprintf("HTTP/%s %s %s", $this->version, $this->statusCode, $this->statusText), true, $this->statusCode); foreach ($this->headers->getCookies() as $cookie) { if ($cookie->isRaw()) { setrawcookie($cookie->getName(), $cookie->getValue(), $cookie->getExpiresTime(), $cookie->getPath(), $cookie->getDomain(), $cookie->isSecure(), $cookie->isHttpOnly()); } else { setcookie($cookie->getName(), $cookie->getValue(), $cookie->getExpiresTime(), $cookie->getPath(), $cookie->getDomain(), $cookie->isSecure(), $cookie->isHttpOnly()); } } return $this; }發(fā)送響應(yīng)體
public function sendContent() { echo $this->content; return $this; }發(fā)送到客戶端
// 若是 fastcgi 模式,則結(jié)束客戶端響應(yīng)后異步執(zhí)行服務(wù)器端的后續(xù)任務(wù),例如中間件的 terminate 方法和事件等 if (function_exists("fastcgi_finish_request")) { fastcgi_finish_request(); } elseif ("cli" !== PHP_SAPI) { static::closeOutputBuffers(0, true); } public static function closeOutputBuffers($targetLevel, $flush) { $status = ob_get_status(true); $level = count($status); $flags = defined("PHP_OUTPUT_HANDLER_REMOVABLE") ? PHP_OUTPUT_HANDLER_REMOVABLE | ($flush ? PHP_OUTPUT_HANDLER_FLUSHABLE : PHP_OUTPUT_HANDLER_CLEANABLE) : -1; while ($level-- > $targetLevel && ($s = $status[$level]) && (!isset($s["del"]) ? !isset($s["flags"]) || $flags === ($s["flags"] & $flags) : $s["del"])) { if ($flush) { ob_end_flush(); } else { ob_end_clean(); } } }后續(xù)動(dòng)作
執(zhí)行中間件的 terminate 方法和事件等
至此,框架核心流程全部走完
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/22612.html
摘要:請(qǐng)求處理階段請(qǐng)求處理階段首先是準(zhǔn)備請(qǐng)求處理的環(huán)境,包括環(huán)境加載服務(wù)提供者注冊(cè)等環(huán)節(jié),然后將請(qǐng)求實(shí)例通過中間件處理及通過路由和控制器的分發(fā)控制,使得不同的請(qǐng)求通過相應(yīng)的處理程序進(jìn)行處理并生成響應(yīng)的過程。 Laravel請(qǐng)求到響應(yīng)的整個(gè)執(zhí)行過程,主要可以歸納為四個(gè)階段,即程序啟動(dòng)準(zhǔn)備階段、請(qǐng)求實(shí)例化階段、請(qǐng)求處理階段、響應(yīng)發(fā)送和程序終止階段。 程序啟動(dòng)準(zhǔn)備階段 服務(wù)容器實(shí)例化 服務(wù)容器的實(shí)...
摘要:跨域的請(qǐng)求出于安全性的原因,瀏覽器會(huì)限制中的跨域請(qǐng)求??缭垂蚕順?biāo)準(zhǔn)需要瀏覽器和服務(wù)端共同配合才能完成,目前瀏覽器廠商已經(jīng)可以將請(qǐng)求部分自動(dòng)完成,所以跨源資源訪問的重點(diǎn)還是在于服務(wù)器端。指明預(yù)請(qǐng)求或者跨域請(qǐng)求的來源。 跨域的請(qǐng)求 出于安全性的原因,瀏覽器會(huì)限制 Script 中的跨域請(qǐng)求。由于 XMLHttpRequest 遵循同源策略,所有使用 XMLHttpRequest 構(gòu)造 HT...
摘要:設(shè)置生成對(duì)象后就要執(zhí)行對(duì)象的方法了,該方法定義在類中,其主要目的是對(duì)進(jìn)行微調(diào)使其能夠遵從協(xié)議。最后會(huì)把完整的響應(yīng)發(fā)送給客戶端。本文已經(jīng)收錄在系列文章源碼學(xué)習(xí)里,歡迎訪問閱讀。 Response 前面兩節(jié)我們分別講了Laravel的控制器和Request對(duì)象,在講Request對(duì)象的那一節(jié)我們看了Request對(duì)象是如何被創(chuàng)建出來的以及它支持的方法都定義在哪里,講控制器時(shí)我們?cè)敿?xì)地描述了...
摘要:事件驅(qū)動(dòng)編程是圖形用戶界面和其他應(yīng)用程序例如應(yīng)用程序中使用的主要范例,用于執(zhí)行某些操作來響應(yīng)用戶輸入。我們來看一下事件驅(qū)動(dòng)編程帶來的收益?,F(xiàn)在讓我們看看采用事件驅(qū)動(dòng)編程方法如何實(shí)現(xiàn)上述相同的功能。 在這篇文章中我們將了解到什么是事件驅(qū)動(dòng)編程以及在Laravel中如何開始構(gòu)建一個(gè)事件驅(qū)動(dòng)應(yīng)用,同時(shí)我們還將看到如何通過事件驅(qū)動(dòng)編程來對(duì)應(yīng)用程序的邏輯進(jìn)行解耦。 在開始之前,先說明一下這篇文章...
摘要:引導(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)注明出處。 這篇文章我們來聊聊 「Laravel 生命周期」 這個(gè)主題。雖然網(wǎng)絡(luò)上已經(jīng)有很多關(guān)于這個(gè)...
閱讀 2439·2019-08-30 15:56
閱讀 1097·2019-08-30 15:55
閱讀 3270·2019-08-30 15:44
閱讀 1005·2019-08-30 10:53
閱讀 1948·2019-08-29 16:33
閱讀 2642·2019-08-29 16:13
閱讀 773·2019-08-29 12:41
閱讀 941·2019-08-26 13:56