日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

由浅入深laravel教程 :中间件

發布時間:2025/6/16 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 由浅入深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中定義,如

kernel中 $routeMiddleware 對應 router中 middleware屬性 kernel中 $middlewareGroups 對應 router中 middlewareGroups屬性$routeMiddleware = [別名 => 有handle方法的類名或匿名函數'auth' => \Illuminate\Auth\Middleware\Authenticate::class,'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,'can' => \Illuminate\Auth\Middleware\Authorize::class,'guest' => \Zhiyi\Plus\Http\Middleware\RedirectIfAuthenticated::class,'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,'ability' => \Zhiyi\Plus\Http\Middleware\UserAbility::class,'sensitive' => \Zhiyi\Plus\Http\Middleware\DisposeSensitive::class,'operation' => \Zhiyi\Plus\Http\Middleware\SensitiveOperation::class,'wang' => function(){這是一個閉包} ];$middlewareGroups = ['web' => [\Zhiyi\Plus\Http\Middleware\EncryptCookies::class,\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,\Illuminate\Session\Middleware\StartSession::class,// \Illuminate\Session\Middleware\AuthenticateSession::class,\Illuminate\View\Middleware\ShareErrorsFromSession::class,\Zhiyi\Plus\Http\Middleware\VerifyCsrfToken::class,\Illuminate\Routing\Middleware\SubstituteBindings::class,'api' //可以是另一組名,這樣,如果指定的中間件中web,那么包括上面的和api組中合起來的所有中間件'wang' // 也可以是$routeMiddleware中的一個別名(鍵名)],'api' => ['throttle:120,1',// :前面是中間件名,:后面是參數'bindings',],'admin' => ['ability:admin: login,你沒有權限訪問后臺。',], ];

路由中間件在進入管道之前,會轉為以下一個由完整類名組成的一維數組

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){})

  • 完整類名 $this->middleWare(IlluminateRoutingMiddlewareThrottleRequests)
  • 三: 使用場景

    全局中間件

    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教程 :中间件的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。