Php Laravel RoleMiddle软件,未找到类角色
我试图添加一个简单的中间件来检查用户是否匹配角色。当我使用中间件时遇到问题,我得到一个异常: ReflectionException:类角色不存在 我不尝试调用名为role的类,所以我假设这是在Laravel某处神奇地发生的 我的中间件:Php Laravel RoleMiddle软件,未找到类角色,php,laravel,laravel-5,middleware,Php,Laravel,Laravel 5,Middleware,我试图添加一个简单的中间件来检查用户是否匹配角色。当我使用中间件时遇到问题,我得到一个异常: ReflectionException:类角色不存在 我不尝试调用名为role的类,所以我假设这是在Laravel某处神奇地发生的 我的中间件: class RoleMiddleware { /** * Run the request filter. * * @param \Illuminate\Http\Request $request * @par
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);
}
}
/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
* @var array
*/
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::class,
'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
];
在用户表中,我有一个角色字段,在用户模型中我有:
/**
* 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,
],
];
有人知道是什么导致了这种反射异常吗?在
Http/Kernel.php
中,您需要包含rolemidware
的完整路径。例如:
...
'role' => [
\App\Http\Middleware\RoleMiddleware::class,
],
...
这归结为两个问题:
$middlewareGroups
可能不允许使用参数。(需要确认)将RoleMiddleware
下拉到$routeMiddleware
已清除异常null
$request->user()
。因此,对于未来的用户,您可能需要考虑您的中间件的放置和检查,以查看<代码> $Quest-USER()/<代码>是否为空。
希望这对其他人有帮助。尝试改变这一点
Route::group(['prefix' => 'support', 'middleware' => ['role:admin', 'web']], function() {
Route::get('threads', 'ThreadController@index');
});
到
我是laravel的初学者,我也遇到了同样的问题,通过将名称从中间件更改为“您自己的中间件名称”来解决此问题。要使Spatiale/laravel权限正常工作,我们必须在
app/Http/Kernel.php
中注册双路由中间件(角色和权限),如下所示:,以及其他两个身份验证中间件:
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);
}
}
/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
* @var array
*/
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::class,
'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
];
尝试\App\Http\Middleware\RoleMiddleware::class
并执行dump autoload
,然后告诉我们它是否有效。命名空间很好,如果我只是使用中间件“role”而不是“role:admin”,它可以到达类,并且它会抛出一个关于缺少参数的错误。它是随use一起导入的,因此不需要完整的命名空间。您现在还可以添加“role\u或\u permission”=>\Spatie\permission\middleware\RoleOrPermissionMiddleware::class,
到受保护的$RouteMiddle软件
找到它。