laravel 学习笔记之中间件
中间件
中间件可以理解为对 HTTP 请求或者相应提前一步进行了处理,比如身份验证、CSRF 保护等,所有的中间件都位于 'app/Http/Middleware' 目录下,可以通过 'php artisan make:middleware your-middleware' 来创建中间件。
中间件中在 handle 方法中对请求进行验证,验证失败返回错误信息,成功则将请求($request)作为参数来调用 $next 进行后续的操作。
namespace App\Http\Middleware;
use Closure;
class MiddlewareName
{
public function handle($request, Closure $next)
{
//执行操作,操作失败返回错误信息,成功则执行下一步操作
return $next($request);
}
}
注册中间件
全局中间件
系统默认自带一些全局中间件,位于 'app/Http/Kernel.php' 的 $middleware 属性中,不管是 web 请求还是 api 接口请求,都会经过全局中间件。
路由中间件
此外该类的 $routeMiddleware 属性中包含了一下 laravel 内置的中间件,为键值对结构,用户可以自行配置自定义的中间件并未其分配一个键,该键可以直接在路由中使用 middleware 方法为路由分配中间件。
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,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
];
Route::get('/', function () {
return view('welcome');
})->middleware('auth');
中间件参数
通过 : 隔开中间件名称和中间件参数来对中间件进行传参
//路由
Route::get('middle',function (){
return 'Test pass!';
})->middleware('my:MyParam');
//中间件
public function handle($request, Closure $next, $param)
{
echo $param; //输出结果为:MyParam
return $next($request);
}