剛開始接觸 Laravel 時,簡直是各種 magic ~ 完全不理解為什麼這裡寫這樣、那裡就會出現相對應的東西…因此這篇先來講些專有名詞、以及當使用者送出一個請求後會經歷的生命週期。
不過說實在的,了解生命週期的目的,大概是出現錯誤時,或是真的做了一兩個專案後,才會比較有感。可以先看一下觀念,報錯時再來看圖思考。
Autoloader 是一個工具,它負責根據類別的名稱自動加載相應的類別文件。在 Laravel 中,Composer Autoloader 負責自動載入應用程序中使用的類別,使你無需手動引入類別文件。
// public/index.php 使用 autoload
require __DIR__ . '/vendor/autoload.php';
// class 就可以用 use 引入
use SomeVendor\SomePackage\SomeClass;
$instance = new SomeClass();
核心是 Laravel 框架的一個重要組件,有兩種類型,即 HTTP Kernel 和 Console Kernel。HTTP Kernel 負責處理來自 Web 的 HTTP 請求,而 Console Kernel 負責處理命令行請求。這些核心充當了整個應用程序的入口,負責協調請求處理流程。
HTTP Kernel:
HTTP Kernel 的檔案位於 app/Http/Kernel.php
中。你可以在這個檔案中找到 Illuminate\Foundation\Http\Kernel
類別的擴展,並在其中定義 HTTP Kernel 中的中介件和全局中介件(Global Middleware)以及其他相關的設定。
Console Kernel:
Console Kernel 的檔案位於 app/Console/Kernel.php
中。這個檔案包含了 Illuminate\Foundation\Console\Kernel
類別的擴展,並定義了控制台核心中的命令(Artisan 命令)以及相關的設定。
服務提供者是 Laravel 應用程序的關鍵組件之一。它們用於引導和配置應用程序的各種功能,如數據庫、路由、事件系統等。服務提供者負責註冊應用程序所需的服務和功能,使其易於擴展和維護。服務提供者在應用程序啟動時進行註冊和引導。
(我個人認為 套件的註冊和引入 更適合 ServiceProvider 的翻譯)
中文版官方文件也寫到:
Service Provider 是 Laravel 中負責啟動應用程式的中心點。不管是你自己開發的應用程式,還是 Laravel 的核心服務,都是使用 Service Provider 啟動的。
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class MyServiceProvider extends ServiceProvider
{
/**
* 註冊套件
*
* @return void
*/
public function register()
{
// 在這裡註冊你的服務,例如數據庫連接、外部 API 客戶端等
$this->app->bind('example', function () {
return new ExampleService();
});
}
/**
* 引導套件
*
* @return void
*/
public function boot()
{
// 在這裡執行引導操作,例如設定路由、設置事件監聽器等
}
}
調度請求是指將傳入的 HTTP 請求根據路由規則導向到適當的處理程序,通常是控制器方法。Laravel 的路由系統負責進行請求的路由解析,並選擇適當的處理程序,以便生成響應。
www.example.com/groups/123
。當談到 "Router(路由器)" 時,你可以把它想像成一個地圖,它告訴 Laravel 應用程序應該如何處理不同的 URL 請求。
路由器是 Laravel 中的一個組件,用於定義應用程序的路由規則。它決定了如何處理特定的 HTTP 請求。路由器負責將 URI 轉換為相應的控制器方法或門戶,並處理中介件。路由器是 Laravel 應用程序的核心部分,用於管理 URL 到代碼之間的映射。
Route::get('/', 'HomeController@index');
// 當用戶訪問根目錄 / 時,應該執行 HomeController 的 index 方法
Route::get('/products', 'ProductController@index');
// 當用戶訪問 /products 時,應該執行 ProductController 的 index 方法
Route::get('/products/{id}', 'ProductController@show');
// 當用戶訪問 /products/{id} 時,應該執行 ProductController 的 show 方法,並且 {id} 是一個動態參數。
public/index.php
檔案,它是每個請求的入口點。index.php
負責包含一些初始的程式碼以執行初始設置。bootstrap/autoload.php
載入 Composer 的自動載入器,用於自動載入應用程式所需的類和檔案。bootstrap/app.php
是 Laravel 應用程式的啟動點,負責初始化並設定整個應用程式。