阅读(1118) (5)

Laravel 8 中间件参数

2021-06-24 09:18:55 更新

中间件还可以接收额外的参数。例如,如果你的应用程序需要在执行给定操作之前验证用户是否为给定的「角色」, 你可以创建一个 CheckRole 中间件,由它来接收「角色」名称作为附加参数。

附加的中间参数会在 $next 参数之后传递给中间件:

<?php

namespace AppHttpMiddleware;

use Closure;

class CheckRole
{
    /**
     * 处理传入的请求
     *
     * @param  IlluminateHttpRequest  $request
     * @param  Closure  $next
     * @param  string  $role
     * @return mixed
     */
    public function handle($request, Closure $next, $role)
    {
        if (! $request->user()->hasRole($role)) {
            // 重定向...
        }

        return $next($request);
    }

}

定义路由时通过一个 : 来隔开中间件名称和参数来指定中间件参数。多个参数就使用逗号分隔:

Route::put('post/{id}', function ($id) {
    //
})->middleware('role:editor');