Laravel 是單入口文件的mvc重型框架,里面集成了消息隊列,orm,ioc等功能模塊。laravel的生命周期簡述如下:
1、從`public\index.php`,進入框架;
2、注冊加載composer自動生成的`class loader`,初始化第三方依賴;
3、生成容器(bootstrap/app.php),注冊核心組件(Kernel::class);
4、處理請求,生成并返回響應;
5、結束請求,進行回調
從`public\index.php`開始。
注冊加載composer自動生成的`class loader`,初始化第三方依賴,laravel本身實現的也已經高度組件化了。
使用上一步生成的容器`Container`類,從`bootstrap/app.php`腳本獲取 Laravel 應用實例,注冊laravel核心組件。
如果是web請求不是命令行請求,那么**創建 Laravel HTTP Kernel 核心**,請求被發送到`HTTP`內核。
HTTP 內核繼承自 Illuminate\\Foundation\\Http\\Kernel 類,這個類中擁有三個核心成員變量 $app,$router,$bootstrappers。
~~~
protected $app;
protected $router;
protected $bootstrappers \= \[
\\Illuminate\\Foundation\\Bootstrap\\LoadEnvironmentVariables::class, # 加載 .env 中的配置信息
\\Illuminate\\Foundation\\Bootstrap\\LoadConfiguration::class, # 加載 config 目錄中所有配置文件的配置信息
\\Illuminate\\Foundation\\Bootstrap\\HandleExceptions::class, # 異常處理
\\Illuminate\\Foundation\\Bootstrap\\RegisterFacades::class, # 注冊門面
\\Illuminate\\Foundation\\Bootstrap\\RegisterProviders::class, # 注冊Service Providers
\\Illuminate\\Foundation\\Bootstrap\\BootProviders::class, # 注冊啟動器
\];
~~~
$app 咱們已經說了足夠多,就是應用容器,我們所有的工作都在這個容器中進行。
$router 路由對象,它提供路由相關的服務,幫助我們把網絡請求分配給對應的路由進行邏輯處理,然后把處理的結果(網絡響應)返回給我們,我們在web.php中定義的路由就是由它來管理的。
$bootstrappers 數組,這個數組中的任務項在網絡請求被處理前運行,我們可以看到**環境檢查,配置加載,異常處理,Facedes 門面注冊,ServiceProvider 注冊**等等任務都需要在網絡請求被處理前被首先執行,而且這些任務是有前后順序的,排在前面的會首先執行,這也很容易理解,因為不管是 Facades 還是 Service Providers 都是定義在 config 目錄中的 app.php 文件中的,只有加載來配置之后才能注冊門面和Service Providers。
結束請求,進行回調,終止 Laravel 應用,Laravel 到此也完成了它的歷史使命。中間件中有一類的中間件,terminable middleware 的處理邏輯就是在這個階段執行的。
**擴展知識【中間件】**
Middleware?,在 Kernel 以及它的基類?Illuminate\\Foundation\\Http\\Kernel 中定義了一系列的 middlewares ,借助這些中間件,就可以完成對用戶請求的過濾和安全檢查等等功能。
~~~
public function __construct(Application $app, Router $router)
{
$this->app = $app;
$this->router = $router;
$route->middlewarePriority = $this->middlewarePriority;
foreach ($this->middlewareGroups as $key => $middleware) {
$router->middlewareGroup($key, $middleware);
}
foreach ($this->routeMiddleware as $key => $middleware) {
$router->aliasMiddleware($key, $middleware);
}
}
~~~
中間件的作用:所有請求在處理前需要經過的 HTTP[中間件](https://laravel.com/docs/5.4/middleware),這些中間件處理[HTTP 會話](https://laravel.com/docs/5.4/session)的讀寫、判斷應用是否處于維護模式、驗證[CSRF 令牌](https://laravel.com/docs/5.4/csrf)等等。

**laravel請求生命周期流程圖,如下**

- 消息隊列
- 為什么要用消息隊列
- 各種消息隊列產品的對比
- 消息隊列的優缺點
- 如何保證消息隊列的高可用
- 如何保證消息不丟失
- 如何保證消息不會重復消費?如何保證消息的冪等性?
- 如何保證消息消費的順序性?
- 基于MQ的分布式事務實現
- Beanstalk
- PHP
- 函數
- 基礎
- 基礎函數題
- OOP思想及原則
- MVC生命周期
- PHP7.X新特性
- PHP8新特性
- PHP垃圾回收機制
- php-fpm相關
- 高級
- 設計模式
- 排序算法
- 正則
- OOP代碼基礎
- PHP運行原理
- zavl
- 網絡協議new
- 一面
- TCP和UDP
- 常見狀態碼和代表的意義以及解決方式
- 網絡分層和各層有啥協議
- TCP
- http
- 二面
- TCP2
- DNS
- Mysql
- 鎖
- 索引
- 事務
- 高可用?高并發?集群?
- 其他
- 主從復制
- 主從復制數據延遲
- SQL的語?分類
- mysqlQuestions
- Redis
- redis-question
- redis為什么那么快
- redis的優缺點
- redis的數據類型和使用場景
- redis的數據持久化
- 過期策略和淘汰機制
- 緩存穿透、緩存擊穿、緩存雪崩
- redis的事務
- redis的主從復制
- redis集群架構的理解
- redis的事件模型
- redis的數據類型、編碼、數據結構
- Redis連接時的connect與pconnect的區別是什么?
- redis的分布式鎖
- 緩存一致性問題
- redis變慢的原因
- 集群情況下,節點較少時數據分布不均勻怎么辦?
- redis 和 memcached 的區別?
- 基本算法
- MysqlNew
- 索引new
- 事務new
- 鎖new
- 日志new
- 主從復制new
- 樹結構
- mysql其他問題
- 刪除
- 主從配置
- 五種IO模型
- Kafka
- Nginx
- trait
- genergtor 生成器
- 如何實現手機掃碼登錄功能
- laravel框架的生命周期