使用参数在Controller中过滤之前的Laravel

时间:2013-04-11 09:21:26

标签: php filter controller laravel laravel-3

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

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值是通过$id方法传递的action_show($id)。但是当我有一个没有参数的控制器方法时,一切正常。如何总是获取filter参数而不是方法参数?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我可以确认会发生什么...当您向控制器添加过滤器时,传递给该操作的任何参数都会添加到过滤器参数的前面。您可以使用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);

});