應用場景:檢測登陸,控制器加載數據,傳遞常量
命令
//中間件創建命令 php artisan make:middleware Check
注意:
1.需要注冊中間件
2.中間件命名不能重復
middleware/Check.php代碼
<?php namespace App\Http\Middleware; use Closure; class Check { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { echo 'middleware-check'; return $next($request); } }
注冊中間件app\Http\Kernel.php
routeMiddleware注冊
protected $routeMiddleware = [ /* * 注冊中間件 * Author:MR.zhou * */ 'check' =>Middleware\Check::class, 'goods' =>Middleware\Goods::class, ];
middlewareGroups注冊
protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, // \Illuminate\Session\Middleware\AuthenticateSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, ], 'api' => [ 'throttle:60,1', 'bindings', ], // 正常 'dds' =>[ 'goods', 'check' ], /* * 錯誤示范 * 命名重復: check與routeMiddleware下的check命名重復,路由調用的時候會出錯。 * */ 'check' =>[ 'goods', 'check' ]
路由調用
// 中間件群組 (b.驗證登陸) Route::group(['middleware' => ['check']], function () { Route::get('/show','IndexController@show'); });
// 可以調用goods、check兩個中間件 Route::group(['middleware' => ['dds']], function () { Route::get('/show','IndexController@show'); });
Route::get('admin/profile', function () { // })->middleware('auth'); Route::get('/', function () { // })->middleware('first', 'second');
場景一:加載常量
Middleware\Constant.php
<?php namespace App\Http\Middleware; use Closure; class Check { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { define('VERSION','5.8'); return $next($request); } }
Kernel.php注冊常量
protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, 'can' => \Illuminate\Auth\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, 'check'=>Middleware\Check::class // 注冊常量 ];
路由調用:
public function index(){ echo VERSION; }
頁面輸出:123456
場景二:檢測登陸;方法跟上面基本一樣
需要掌握的技巧:基本路由加載中間件,加載多個中間件,群組中間件