Laravel Before Filter在控制器中使用参数


Laravel Before Filter in the Controller with arguments

我有一些麻烦与过滤器在我的控制器和有参数。也许你们谁能帮我。谢谢你!我有一个类似的控制器:

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。但是当我有一个没有参数的控制器方法时一切都很好。我如何总是获得过滤器参数而不是方法参数?

谢谢你的帮助!

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

但是,当你给路由添加一个过滤器时,情况就不是这样了,这个过滤器不需要任何额外的参数就会运行。

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

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);
});