php - 带参数的 Laravel 5 中间件

标签 php laravel laravel-5 laravel-validation

我是 Laravel 5 的绝对初学者。

我创建了一个名为 BeforeMiddleware 的中间件类,该类的蓝图如下。

class BeforeMiddleware {
    public function handle($request, Closure $next, $role)
    {
        if($request->user()->hasRole($role)){
            return redirect('/pensions');
        }
        return $next($request);
    }
}

在 kernel.php 中注册为

protected $routeMiddleware = [
        'auth' => 'App\Http\Middleware\Authenticate',
        'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
        'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
        'role' => 'App\Http\Middleware\BeforeMiddleware',
    ];

用户模型如下

class User extends Model {
    public function hasRole($name)
    {
        return ($this->role->name == $name) ? true : false;
    }

    public function role()
    {
        return $this->belongsTo('App\Models\Role');
    }
}

routes.php 中的用法如下。

Route:get('/reporting', [ 'middleware' => 'role:Owner', 'uses' => function(){
    return 'secret data only be viewable by the owners';
}]);

如果我在浏览器中打开它/reporting,我会收到以下错误。

ReflectionException in Container.php line 776:
Class role:Owner does not exist

但是如果我在中间件中硬编码'Owner'并删除$role参数,并将其从现在看起来像的路由中删除这个。

BeforeMiddleware.php

class BeforeMiddleware {
    public function handle($request, Closure $next, $role)
    {
        if($request->user()->hasRole('Owner')){
            return redirect('/pensions');
        }
        return $next($request);
    }
}

路线.php

Route:get('/reporting', [ 'middleware' => 'role', 'uses' => function(){
        return 'secret data only be viewable by the owners';
    }]);

它按预期工作...

因此我的问题是在使用中间件控制路由时如何传递该参数

有什么想法吗?

最佳答案

如果您仔细阅读Middleware Documentation ,你会注意到这一行

Middleware parameters may be specified when defining the route by separating the middleware name and parameters with a :. Multiple parameters should be delimited by commas

因此,在您的情况下,如果您的中间件类名为 BeforeMiddleware,中间件定义的第一部分应该是 before,然后是 :,然后是 :您可以定义路由参数,用逗号分隔,如下所示:

Route:get('/reporting', [ 'middleware' => 'before:Owner', 'uses' => function(){
    return 'secret data only be viewable by the owners';
}]);

关于php - 带参数的 Laravel 5 中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30822071/

相关文章:

php - 如何在plesk centos7上安装ffmpeg php扩展

允许字母数字和点 (.) 的 JavaScript 正则表达式

laravel - 类别和子类别查询?

php - laravel 从数据库中拉取数据

php - laravel - 来自 mysql 数据库的时间总和

php - 如何在mysql中根据条件增加行object_id?

php - Macroable.php 方法foregin 不存在

php - mysql 查询(如)和 php 的问题

使用两个表进行 Laravel 身份验证

php - fopen 与 cron 工作