1. 程式人生 > >Laravel 三種中介軟體作用講解

Laravel 三種中介軟體作用講解

昨天在開發過程中,需要使用到中介軟體的技術,之前都只是簡單的認為要增加中介軟體就往middleware裡新增中介軟體即可。本著週末的時間,就仔細研究了下 $middleware $middlewareGroup $routeMiddleware三個屬性,到底是怎麼樣用的,通過查閱文件和網上資料,可算是搞明白了這三個屬性是怎麼用的和該怎麼用。

$middleware屬性:

這個屬性稱為全域性中介軟體,為什麼說是全域性中介軟體呢?因為你的每一次請求,這裡面的每個中介軟體都會執行。

$routeMiddleware屬性:

這個屬性稱為路由中介軟體,為什麼說是路由中介軟體呢?因為定義在該屬性內的中介軟體,只能在定義路由時候引用。
假設這是我們定義的路由中介軟體:

protected $routeMiddleware = [
    ...
    'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
];

如果我們要使用\Illuminate\Auth\Middleware\Authenticate::class這個中介軟體該怎麼做呢?
Route::get('hello/laravel-china','[email protected]')->middleware('auth');
我們定義路由時候呼叫了middleware方法,引數值是auth, 這樣訪問這個路由的時候,就會執行該中介軟體。明白了吧!很簡單的。

$middlewareGroups屬性:

這個屬性稱為中介軟體組,為什麼說是中介軟體組呢?我們之前說了路由中介軟體,是不是感覺這樣新增路由中介軟體很麻煩,比如我們執行10箇中間件,是不是就要在定義路由時候新增10個呢?有了中介軟體組就不用這麼麻煩了。我們來看下中介軟體組是怎麼定義的。

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        ...
    ],
    'api' => [
        ...
    ],
];

好了,上面的例子就是定義中介軟體組的格式,比如我們看 web這個鍵值,它對應為一個數組,該陣列有多箇中間件組成。當我們定義好後,該怎麼使用呢?
我們在宣告路由的時候,這樣呼叫就可以了。

Route::group(['middleware' => 'web'],function($route){
    $route->get('hello/world',function(){});
    $route->get('hello/php',function(){});
    // 這樣在訪問這個這些路由的時候,就會執行中介軟體組 web 所對應的中介軟體,方便多了,批量式的。
});

總結:

$middleware:全域性中介軟體,要對所有的請求要做一些處理的時候,就適合定義在該屬性內。(比如統計請求次數這些)
$middlewareGroups:中介軟體組,比如我們專案有api請求和web的請求的時候,就要把兩種型別的請求中介軟體分離開來,這時候就需要我們中介軟體組啦。
$routeMiddleware:路由中介軟體,有些個別的請求,我們需要執行特別的中介軟體時,就適合定義在這屬性裡面。

已經掌握中介軟體的大神就請不要見笑,本著寫一次也是想讓自己熟悉laravel的中介軟體和一些初學laravel朋友的一點點幫助,謝謝!