【问题标题】:Laravel Before Filter in the Controller with argumentsLaravel 在带参数的控制器中过滤之前
【发布时间】:2013-04-03 10:19:06
【问题描述】:

我的控制器中的过滤器和参数有一些问题。也许你们中的一个可以帮助我。谢谢你。 我有一个类似于这个的控制器:

class Test extends Base_Controller
{

    public function __construct()
    {
        parent::__construct();    
        $this->filter('before', 'permission:destroy|auth')->only(array('show'));        
    }
    public function action_show($id)
    {
    }

我定义了一个这样的过滤器:

Route::filter('permission', function($permission)
{
    echo $permisson;

如果我现在调用控制器,我的过滤器的 $permission 值是通过 action_show($id) 方法传递的 $id。但是当我有一个没有参数的控制器方法时,一切正常。如何始终获取过滤器参数而不是方法参数?

感谢您的帮助!

【问题讨论】:

    标签: php filter controller laravel laravel-3


    【解决方案1】:

    我可以确认会发生什么...当您将过滤器添加到控制器时,传递给操作的任何参数都会添加到过滤器参数的前面。您可以使用func_get_args() 来确认是这种情况。

    但是,当您将过滤器添加到路由时,情况并非如此,过滤器会在没有任何其他参数的情况下运行。

    所以我可以在这里看到 2 个选择,要么将过滤器添加到路由...

    Route::get('test/(:any)', array('before' => 'permission:destroy|auth', 'use' => 'test@show'));
    

    或者修改你的过滤器以使用func_get_args(),比如...

    Route::filter('permission', function()
    {
        $args = func_get_args();
        $permission = array_pop($args);
    
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-10
      相关资源
      最近更新 更多