前言
Larave作為近年來最流行的PHP框架之一并思,在目前的工作中也是使用比較頻繁的框架,功能十分全面语稠∷伪耍框架底層封裝思想先進(jìn),使用了很多PHP的新特性仙畦,以核心的服務(wù)容器展開输涕,對服務(wù)進(jìn)行啟動注冊,使用時注入慨畸,進(jìn)行解耦莱坎,注重代碼的組件化和可擴(kuò)展性,提供門面(外觀)模式在開發(fā)時能夠更優(yōu)雅的調(diào)用所需服務(wù)寸士。是一款很值得研究的PHP框架檐什,在源碼學(xué)習(xí)的過程中還是有遇到不少難題碴卧,這個系列文章就通過自己的學(xué)習(xí)積累,記錄下要點(diǎn)乃正,方便進(jìn)行后續(xù)回顧住册;
其它
材料:Laravel6.0
安裝:Composer 使用Composer安裝Laravel
Laravel框架的功能點(diǎn)很多,這個系列的文章還是針對核心流程源碼的解析進(jìn)行記錄烫葬,僅推薦對Laravel常規(guī)使用已經(jīng)了解但需探索源碼的朋友進(jìn)行觀看界弧。因?yàn)榭蚣茉创a跳動性比較大,所以核心源碼解析系列進(jìn)行大流程上的注釋描述搭综,一些重要且頻繁使用的功能會單獨(dú)寫文章進(jìn)行具體描述垢箕。如果錯誤煩請留言區(qū)糾正;
正文
首先先了解框架的重要思想:依賴注入、控制反轉(zhuǎn)、服務(wù)容器牙寞、服務(wù)提供者
其次再了解服務(wù)容器常用方法:服務(wù)容器綁定篇拦止、服務(wù)容器解析篇
Laravel的入口文件index.php默認(rèn)是放在根目錄中的public目錄下,下面直接貼源碼(這里及后續(xù)附上的都是刪除官方注釋壁顶,以及非主要流程后的源碼)以注釋的方式進(jìn)行概述,具體的功能會再后續(xù)的文章中進(jìn)行詳細(xì)描述
//設(shè)置框架啟動時間(Unix 時間戳)
define('LARAVEL_START', microtime(true));
//引入Composer注冊自動加載程序, Laravel的自動類文件自動加載等功能都是通過Composer來實(shí)現(xiàn)的
require __DIR__.'/../vendor/autoload.php';
對應(yīng)解析->Composer注冊自動加載
//引入核心應(yīng)用類, 主要是實(shí)現(xiàn)核心類庫加載以及Laravel框架中核心的服務(wù)容器注冊加載等
$app = require_once __DIR__.'/../bootstrap/app.php';
對應(yīng)解析->核心應(yīng)用容器類Application
//獲取在app.php中已經(jīng)注冊的Kernel
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
//TODO 停更一段時間
//容器中綁定的Kernel是App\Http下的,該類繼承了Illuminate\Foundation\Http下的Kernel修档,這里調(diào)用的就是父類的handle方法
//主要實(shí)現(xiàn)的功能是通過管道實(shí)現(xiàn)中間件及路由分發(fā)執(zhí)行
$response = $kernel->handle(
//創(chuàng)建request實(shí)例
$request = Illuminate\Http\Request::capture()
);
//響應(yīng)請求
$response->send();
//響應(yīng)中間件
$kernel->terminate($request, $response);
END