1. 程式人生 > >Laravel ——路由(中介軟體與路由組)

Laravel ——路由(中介軟體與路由組)

我們知道,路由是一個過程,分析來自客戶端的請求按照路由規則分發至相應的處理邏輯。但有種情況,打個比方:後臺。後臺不是所有人都能訪問的,我們在正式的處理邏輯前,需要做一個驗證,比如驗證是否具有許可權或者請求的資料是否合法。

這時候,路由過程的一部分——中介軟體就上場了。

app/Http/Kernel.php中的 $middleware 陣列是全域性中介軟體,也就是說,任何一條路由都會被應用這些中介軟體,比如裡面的CSRF驗證中介軟體。
有時候我們不需要全域性中介軟體,這時候可以將某一箇中間件註冊至app/Http/Kernel.php檔案中的$routeMiddleware陣列,陣列的鍵名是中介軟體的別名,鍵值是具體的中介軟體類,如
'auth' => 'App\Http\Middleware\AuthMiddleware'。
具體如何在某一路由上使用特定的中介軟體我們下文繼續。


我們在app/Http/Kernel.php檔案中的$routeMiddleware陣列註冊了一個獨立中介軟體,這一中介軟體可被單獨用繫結在一個路由和路由組上。在路由定義的時候可以像這樣:

Route::get('admin/profile', ['middleware' => 'auth', function()
{
    //
}]);
當我們訪問http://yourdomain/admin/profile的時候,首先會經過全域性中介軟體,然後就是我們在app/Http/Kernel.php的$routeMiddleware陣列中定義的名稱為auth的中介軟體。

路由組群

路由組群往往適用於給某一類路由分組,給這個路由組分配的中介軟體、過濾器等,都會被運用到該組內的所有路由。

說白了,路由組就是簡化一部分路由定義過程的。比如,後臺的我都想通過地址http://yourdomain/admin/***訪問,假如我有使用者(user)文章(article)兩個模組,他們的訪問都要經過一個驗證許可權的中介軟體,我需要這樣定義路由:

Route::get('admin/user', ['middleware' => 'authority', function() {
    // blablabla...
}]);

Route::get('admin/article', ['middleware' => 'authority', function() {
    // blablabla...
}]);

現在只有兩條路由,我多寫幾個admin,middleware沒啥的,但系統龐大以後,每個都要單獨寫對應的中介軟體,容易出錯,不易管理。這時候,就應該使用路由組:
Route::group(['prefix' => 'admin', 'middleware' => 'authority'], function() {
    Route::get('user', function() {
        // blablabla...
    });
    Route::get('article', function() {
        // blablabla...
    });
});