Laravel RoleMiddleware,找不到类角色 [英] Laravel RoleMiddleware, class role not found

查看:109
本文介绍了Laravel RoleMiddleware,找不到类角色的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试添加一个简单的中间件来检查用户是否与角色匹配.使用中间件时遇到问题,出现异常:

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?

推荐答案

这归结为两个问题:

  1. $middlewareGroups可能不允许使用参数. (需要确认)将RoleMiddleware降至$routeMiddleware摆脱了异常.

  1. $middlewareGroups may not allow for parameters. (Needs to be confirmed) Dropping RoleMiddleware 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆