【发布时间】:2016-05-16 18:33:56
【问题描述】:
我正在尝试添加一个简单的中间件来检查用户是否与角色匹配。我在使用中间件时遇到了一个问题,我得到了一个异常:
ReflectionException:类角色不存在
我没有尝试调用名为 role 的类,所以我认为这在 Laravel 的某个地方神奇地发生了。
我的中间件:
class RoleMiddleware
{
/**
* Run the request filter.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string $role
* @return mixed
*/
public function handle($request, Closure $next, $role)
{
if (! $request->user()->is($role)) {
return redirect('/login');
}
return $next($request);
}
}
在用户表中,我有一个角色字段,在用户模型中我有:
/**
* Check if a user is a certain role
*
* @param $role
* @return bool
*/
function is($role) {
return ($this->role == $role);
}
路线组:
Route::group(['prefix' => 'support', 'middleware' => ['role:admin', 'web']], function() {
Route::get('threads', 'ThreadController@index');
});
在 Http/Kernel.php 中:
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
],
'role' => [
RoleMiddleware::class,
],
];
有人对可能导致此 ReflectionException 的原因有任何想法吗?
【问题讨论】:
-
尝试
\App\Http\Middleware\RoleMiddleware::class并同时执行dump-autoload,然后告诉我们它是否有效。 -
命名空间很好,它可以到达类,如果我只使用中间件'role'而不是'role:admin',它会抛出一个关于缺少参数的错误。
标签: php laravel laravel-5 middleware