laravel 啟動過程是什么

laravel是一款流行的php開源框架,它的啟動過程與其他框架類似,都需要經歷一定的準備工作。本文將針對laravel的啟動過程進行詳細介紹。

一、入口文件index.php

Laravel的入口文件是index.php,所有請求都將通過這個文件進入框架。在index.php中,我們可以看到以下代碼段:

/* |-------------------------------------------------------------------------- | Turn On The Lights |-------------------------------------------------------------------------- | | We need to illuminate PHP development, so let us turn on the lights. | This bootstraps the framework and gets it ready for use, then it | will load up this application so that we can run it and send | the responses back to the browser and delight our users. | */  $app = require_once __DIR__.'/../bootstrap/app.php';

這段注釋解釋了代碼的作用,也可以看到require_once引入了bootstrap/app.php這個文件,也就是Laravel的啟動文件。

二、啟動文件bootstrap/app.php

在app.php文件中,我們可以主要看到三個關鍵類的實例化:$app、$kernel、$router。下面我們來逐一介紹。

  1. $app

$app是IlluminateFoundationApplication類的實例,是整個框架的核心,它管理了 Laravel 應用程序的容器并提供了許多強有力的功能,如路由、請求處理、事件CookieSession、異常處理等等。接下來我們先看一下$app如何初始化。

在$app的構造函數中,它首先繼承了IlluminateContainerContainer類,生成了一個容器實例。在這個容器實例中我們可以綁定和注入我們需要的服務。

接著,它會注冊Laravel的所有核心容器服務,如路由、日志、視圖等。

最后,它會加載Laravel配置文件,這些配置文件存放在config目錄下,并將其放入$app實例的屬性中。

  1. $kernel

$kernel是IlluminateContractshttpKernel接口的一個實例,它是Laravel的HTTP內核,負責處理所有的HTTP請求,是連接請求和響應的橋梁。$kernel的主要作用是調用請求的中間件,并將請求傳遞給路由器,最后將響應傳遞給客戶端。

在$app實例化后,它會調用$app->make()方法然后通過容器解析獲取$kernel的實例。在這個過程中,$app的容器會解析$config[‘app’][‘middleware’]配置并注冊中間件,然后將中間件存儲到$kernel的實例中。

  1. $router

$router是IlluminateRoutingRouter類的實例,它是Laravel的路由器,處理所有的路由解析和分發。$router的主要作用是將請求和相應的操作進行匹配,為請求將被處理的路由存儲在請求實例的屬性中。

在$app實例化后,它會使用相應的配置生成路由器實例,并通過$app實例的instance方法注冊到Laravel的容器中。

此外,還需要提到的是,$app會將請求實例及其它相關實例綁定到容器中,以供中間件、路由和控制器使用。容器綁定完成后,Laravel就完成了準備工作。

三、調度請求

在Laravel中,請求的調度流程如下:

1.從客戶端發起HTTP請求。

2.請求首先經過Laravel的public/index.php文件,并被轉發到bootstrap/app.php文件中。

3.在bootstrap/app.php文件中,Laravel生成$app、$kernel和$router的實例,并將請求實例綁定到容器中。然后$app會調用$kernel的handle方法處理請求。

4.在$kernel的handle方法中,Laravel通過容器解析并依次調用注冊的中間件,然后將請求轉發給路由器。

5.在路由器中,Laravel從請求中提取URI,然后將其與路由器實例中定義的所有路由進行匹配。如果找到匹配的路由,Laravel就將控制權傳遞給相應的控制器。

6.控制器是請求的主要處理程序,它會調用業務邏輯代碼處理請求,并最終將結果作為響應返回給客戶端。

7.如果路由器沒有找到匹配的路由,它會將請求傳遞給錯誤處理程序。

8.在錯誤處理程序中,Laravel會根據錯誤的類型和配置,生成相應的響應返回給客戶端。

? 版權聲明
THE END
喜歡就支持一下吧
點贊9 分享