由浅入深laravel教程 :中间件
生活随笔
收集整理的這篇文章主要介紹了
由浅入深laravel教程 :中间件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
中間件是什么?
每個中間件是一個定義了handle方法的類或是一個匿名函數,一般所有中間件放在同一個文件夾middleware中,方便管理
public function handle($request, Closure $next)
中間件有什么用
一: 路由前中間件(也叫全局中間件)
這些中間件,在根據請求找到匹配的路由之前就開始執行1.配置
// 在 \App\Http\Kernel::$middleware中定義,是一個數組,如 $middleware = [\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,\App\Http\Middleware\TrimStrings::class,\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,\App\Http\Middleware\TrustProxies::class, ];// 在 \Zhiyi\Plus\Http\Kernel::$middleware的值為 $middleware = [\Zhiyi\Plus\Http\Middleware\CrossDomain::class,\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,\Zhiyi\Plus\Http\Middleware\TrimStrings::class,\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,\Zhiyi\Plus\Http\Middleware\TrustProxies::class, ];2.執行順序
是按上下執行,這里面的中間執行完后,再執行\Illuminate\Foundation\Http\Kernel::dispatchToRouter()
框架內置的中間件放在Illuminate\Foundation\Http\Middleware下面,一共有6個
二: 路由中間件
這些中間件是在路由匹配之后,與當前匹配路由及控制器有關1: 在控制器中定義
在控制器的構造函數中定義
public function __construct(){$this->middleWare('auth');$this->middleWare('log',['only'=>['show','detail']]); }覆蓋getMiddleware()方法
public function getMiddleware(){return ['auth','log',['middleware'=>'hello','options'=>['only'=>['index','show']]]]; }2: 在路由中定義
在第二個參數中定義middleware
Route::get('/login',['uses'=>'LoginController@index','middleware'=>['abc','def'] ])直接給路由使用middleware()方法
Route::get('/login','')->middleware('中間件1','中間件2');//數組也行在group中定義
Route::group(['middleware' => ['has-permission:access-dashboard']], function (Router $router) use ($adminRoute) {... });為什么全局中間件是一個完整的類名,而路由中間件是鍵名或群組名
鍵名或群組名其實是對應一個中間件類,它們的對應關系在Kernel中定義,如
路由中間件在進入管道之前,會轉為以下一個由完整類名組成的一維數組
Array([0] => Illuminate\Routing\Middleware\ThrottleRequests:120,1[1] => Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse[2] => Illuminate\Session\Middleware\StartSession[3] => Illuminate\View\Middleware\ShareErrorsFromSession[4] => Zhiyi\Plus\Http\Middleware\VerifyCsrfToken[5] => Illuminate\Routing\Middleware\SubstituteBindings )中間件的格式
$this->middleWare('auth');
$this->middleWare('api')
$this->middleWare(function($request,$next){})
三: 使用場景
全局中間件
new Pipeline($this->app))->send($request) ->through($this->middleware) ->then($this->dispatchToRouter())路由中間件
new Pipeline($this->container))->send($request)->through($middleware)->then(function ($request) use ($route) { return $this->prepareResponse($request, $route->run());} );總結
以上是生活随笔為你收集整理的由浅入深laravel教程 :中间件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据绑定表达式(下):.NET发现之旅(
- 下一篇: Angular 4 辅助路由