摘要:發送響應發送響應頭發送響應體發送到客戶端若是模式,則結束客戶端響應后異步執行服務器端的后續任務,例如中間件的方法和事件等后續動作執行中間件的方法和事件等至此,框架核心流程全部走完
Laravel 發送響應
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; }發送響應頭
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; }發送響應體
public function sendContent() { echo $this->content; return $this; }發送到客戶端
// 若是 fastcgi 模式,則結束客戶端響應后異步執行服務器端的后續任務,例如中間件的 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(); } } }后續動作
執行中間件的 terminate 方法和事件等
至此,框架核心流程全部走完
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/22612.html
摘要:請求處理階段請求處理階段首先是準備請求處理的環境,包括環境加載服務提供者注冊等環節,然后將請求實例通過中間件處理及通過路由和控制器的分發控制,使得不同的請求通過相應的處理程序進行處理并生成響應的過程。 Laravel請求到響應的整個執行過程,主要可以歸納為四個階段,即程序啟動準備階段、請求實例化階段、請求處理階段、響應發送和程序終止階段。 程序啟動準備階段 服務容器實例化 服務容器的實...
摘要:跨域的請求出于安全性的原因,瀏覽器會限制中的跨域請求。跨源共享標準需要瀏覽器和服務端共同配合才能完成,目前瀏覽器廠商已經可以將請求部分自動完成,所以跨源資源訪問的重點還是在于服務器端。指明預請求或者跨域請求的來源。 跨域的請求 出于安全性的原因,瀏覽器會限制 Script 中的跨域請求。由于 XMLHttpRequest 遵循同源策略,所有使用 XMLHttpRequest 構造 HT...
摘要:設置生成對象后就要執行對象的方法了,該方法定義在類中,其主要目的是對進行微調使其能夠遵從協議。最后會把完整的響應發送給客戶端。本文已經收錄在系列文章源碼學習里,歡迎訪問閱讀。 Response 前面兩節我們分別講了Laravel的控制器和Request對象,在講Request對象的那一節我們看了Request對象是如何被創建出來的以及它支持的方法都定義在哪里,講控制器時我們詳細地描述了...
摘要:事件驅動編程是圖形用戶界面和其他應用程序例如應用程序中使用的主要范例,用于執行某些操作來響應用戶輸入。我們來看一下事件驅動編程帶來的收益。現在讓我們看看采用事件驅動編程方法如何實現上述相同的功能。 在這篇文章中我們將了解到什么是事件驅動編程以及在Laravel中如何開始構建一個事件驅動應用,同時我們還將看到如何通過事件驅動編程來對應用程序的邏輯進行解耦。 在開始之前,先說明一下這篇文章...
摘要:引導程序包括完成環境檢測配置加載異常處理注冊服務提供者注冊啟動服務這六個引導程序。處理請求請求處理發生在內核的方法內。發送響應頭部信息發送報文主題終止程序程序終止,完成終止中間件的調用終止中間件以上便是的請求生命周期的始末。 本文首發于個人博客 深度挖掘 Laravel 生命周期,轉載請注明出處。 這篇文章我們來聊聊 「Laravel 生命周期」 這個主題。雖然網絡上已經有很多關于這個...
閱讀 2380·2019-08-30 15:56
閱讀 1039·2019-08-30 15:55
閱讀 3203·2019-08-30 15:44
閱讀 933·2019-08-30 10:53
閱讀 1888·2019-08-29 16:33
閱讀 2470·2019-08-29 16:13
閱讀 719·2019-08-29 12:41
閱讀 874·2019-08-26 13:56