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);
}
posted @ 2020-10-14 17:48  黑夜的海  阅读(206)  评论(0编辑  收藏  举报