Thinkphp

Laravel 的生命週期

1、Laravel 採用了單一入口模式,應用的所有請求入口都是 public/index.php 文件。

2、註冊類文件自動加載器 : Laravel通過 composer 進行依賴管理,無需開發者手動導入各種類文件,而由自動加載器自行導入。

3、創建服務容器:從 bootstrap/app.php 文件中取得 Laravel 應用實例 $app (服務容器)創建 HTTP / Console 內核:傳入的請求會被髮送給 HTTP 內核或者 console 內核進行處理

4、載入服務提供者至容器:在內核引導啟動的過程中最重要的動作之一就是載入服務提供者到你的應用,服務提供者負責引導啟動框架的全部各種組件,例如數據庫、隊列、驗證器以及路由組件。

5、分發請求:一旦應用完成引導和所有服務提供者都註冊完成,Request 將會移交給路由進行分發。路由將分發請求給一個路由或控制器,同時運行路由指定的中間件

Yii2生命週期

1.用戶向入口腳本 web/index.php 發起請求。

2.入口腳本加載應用配置並創建一個應用 實例去處理請求。

3.應用通過請求組件解析請求的 路由。

4.應用創建一個控制器實例去處理請求。

5.控制器創建一個動作實例並針對操作執行過濾器。

6.如果任何一個過濾器返回失敗,則動作取消。

7.如果所有過濾器都通過,動作將被執行。

8.動作會加載一個數據模型,或許是來自數據庫。

9.動作會渲染一個視圖,把數據模型提供給它。

10.渲染結果返回給響應組件。

11.響應組件發送渲染結果給用戶瀏覽器。


ThinkPHP生命週期

1、入口文件

<code>// 應用入口文件/<code>
<code>index.php// 定義項目路徑/<code>
<code>define('APP_PATH', __DIR__ . '/../application/');// 加載框架引導文件require __DIR__ . '/../thinkphp/start.php';/<code>

2、引導文件

接下來就是執行框架的引導文件,start.php文件就是系統默認的一個引導文件。在引導文件中,會依次執行下面操作:

3、註冊自動加載

系統會調用Loader::register()方法註冊自動加載,在這一步完成後,所有符合規範的類庫(包括Composer依賴加載的第三方類庫)都將自動加載。

4、註冊錯誤和異常機制

執行Error::register()註冊錯誤和異常處理機制。

在整個應用請求的生命週期過程中,如果拋出了異常或者嚴重錯誤,均會導致應用提前結束,並響應輸出異常和錯誤信息。

5、應用初始化

執行應用的第一步操作就是對應用進行初始化,包括:

· 加載應用(公共)配置;

· 加載擴展配置文件(由extra_config_list定義);

· 加載應用狀態配置;

· 加載別名定義;

· 加載行為定義;

· 加載公共(函數)文件;

· 註冊應用命名空間;

· 加載擴展函數文件(由extra_file_list定義);

· 設置默認時區;

· 加載系統語言包;

6、URL訪問檢測

<code>應用初始化完成後,就會進行URL的訪問檢測,包括PATH_INFO檢測和URL後綴檢測。/<code>

所以,如果你的環境只能支持普通方式的URL參數訪問,那麼必須使用

<code>http://serverName/index.php?s=/index/index/hello&val=value/<code>

7、路由檢測

· 路由到模塊/控制器/操作;

· 路由到外部重定向地址;

· 路由到控制器方法;

· 路由到閉包函數;

· 路由到類的方法;

路由地址可能會受域名綁定的影響。

8、分發請求

在完成了URL檢測和路由檢測之後,路由器會分發請求到對應的路由地址,這也是應用請求的生命週期中最重要的一個環節。

在這一步驟中,完成應用的業務邏輯及數據返回。

建議統一使用return返回數據,而不是echo輸出,如非必要,請不要使用exit或者die中斷執行。

直接echo輸出的數據將無法進行自動轉換響應輸出的便利。

類的方法

除了以上方式外,還支持分發請求到類的方法,包括:靜態方法: 'blog/:id'=>'\\org\\\\util\\Blog::read' 類的方法:'blog/:id'=>'\\app\\index\\controller\\Blog@read'

9、響應輸出

控制器的所有操作方法都是return返回而不是直接輸出,系統會調用Response::send方法將最終的應用返回的數據輸出到頁面或者客戶端,並自動轉換成default_return_type參數配置的格式。所以,應用執行的數據輸出只需要返回一個正常的PHP數據即可。

10、應用結束

事實上,在應用的數據響應輸出之後,應用並沒真正的結束,系統會在應用輸出或者中斷後進行日誌保存寫入操作。

系統的日誌包括用戶調試輸出的和系統自動生成的日誌,統一會在應用結束的時候進行寫入操作。

而日誌的寫入操作受日誌初始化的影響。


分享到:


相關文章: