Laravel RoleMiddleware,找不到类角色 [英] Laravel RoleMiddleware, class role not found
问题描述
我正在尝试添加一个简单的中间件来检查用户是否与角色匹配.使用中间件时遇到问题,出现异常:
I'm trying to add a simple middleware to check if a user matches a role. I'm running into an issue when I use the middleware, I get an Exception:
ReflectionException:类角色不存在
ReflectionException: class role does not exist
我不会尝试调用名为角色的类,因此我认为这在Laravel中的某个地方神奇地发生了.
I do not attempt to call a class named role so I assume this is happening magically in Laravel somewhere.
我的中间件:
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);
}
}
在users表中,我有一个角色字段,在User模型中,我有:
In the users table, I have a role field and in the User model I have:
/**
* 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中:
In 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的原因有任何想法?
Anyone have any ideas on what could be causing this ReflectionException?
推荐答案
这归结为两个问题:
-
$middlewareGroups
可能不允许使用参数. (需要确认)将RoleMiddleware
降至$routeMiddleware
摆脱了异常.
$middlewareGroups
may not allow for parameters. (Needs to be confirmed) DroppingRoleMiddleware
down to$routeMiddleware
got rid of the exception.
在'role:admin'之后具有'web'导致null
$request->user()
.因此,对于将来的用户,您可能需要考虑放置中间件,并检查一下$request->user()
是否为空.
Having 'web' after 'role:admin' resulted in a null
$request->user()
. So for future users, you may need to consider placement of your middleware and a check to see if $request->user()
is null.
希望这对其他人有帮助.
Hope this helps someone else.
这篇关于Laravel RoleMiddleware,找不到类角色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!