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朋友的一點點幫助,謝謝!