【问题标题】:Laravel Middleware parameters from Controller constructor来自 Controller 构造函数的 Laravel 中间件参数
【发布时间】:2015-09-16 11:11:10
【问题描述】:

我想知道如何使用控制器构造函数设置中间件并引用中间件参数,就像我在路由文件中成功完成的那样。

我在 routes.php 中可以正常工作:

Route::group(['middleware' => 'user-type:user'], function () {
  // routes
});

现在我想在控制器构造函数中执行此操作,但遇到了一些问题...

public function __construct()
{
    $this->middleware = 'event-is-active:voting';
}

当我访问应用了上述内容的链接时,我收到以下错误:

ErrorException in ControllerDispatcher.php line 127:
Invalid argument supplied for foreach()

当然我做错了 - 我在文档中看不到如何做,阅读源代码也没有帮助,但也许我忽略了一些东西。所以我想知道什么是正确的方法,甚至可能吗?任何帮助将不胜感激,谢谢!

【问题讨论】:

    标签: php laravel middleware laravel-5.1


    【解决方案1】:

    您使用错误的语法从控制器构造函数设置中间件。

    首先你必须使用 laravel 5.1 才能使用中间件参数。

    现在你只能在构造函数的控制器中设置中间件。

    喜欢

    function __construct()
    {
        $this->middleware('event-is-active:voting');//this will applies to all methods of your controller
        $this->middleware('event-is-active:voting', ['only' => ['show', 'update']]);//this will applies only show,update methods of your controller
    
    }
    

    请注意,以上代码中的 show 和 update 是示例名称。您必须写下您在控制器中使用的实际名称。

    假设您正在使用 1.getShowUser($userId) 2. postUpdateUser($userId)

    你必须在这些方法中应用中间件,如下所述:

    function __construct()
    {
        $this->middleware('event-is-active:voting', ['only' => ['getShowUser', 'postUpdateUser']]);
    
    }
    

    【讨论】:

    • 感谢您的回复。我的语法怎么错了?我的代码和你的代码之间的唯一区别是构造方法上的 public 标识符。我正在使用 Laravel 5.1。我希望它适用于我的所有方法,因此我没有限制它。
    • 我发现下面的语法是错误的。 $this->middleware = 'event-is-active:voting';
    • 构造函数需要公共标识符。我怎么刚刚演示了代码来解释你。
    • 文档中控制器中间件的检出语法。 laravel.com/docs/5.1/controllers#controller-middleware
    • 有时我也会遇到这种情况。
    【解决方案2】:

    试试这个

    function __construct()
    {
        $this->middleware('user-type:param1,param2', ['only' => ['show', 'update']]);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      • 1970-01-01
      • 1970-01-01
      • 2021-02-16
      • 2016-10-07
      • 1970-01-01
      相关资源
      最近更新 更多