2013-04-11 443 views
0

我的控制器中有过滤器和参数。也许你们中的一个可以帮助我。谢谢。 我有类似这样的控制器:Laravel使用参数在控制器中过滤之前

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)方法。但是,当我有一个没有参数的控制器方法一切正常。我如何总是得到过滤器参数,而不是方法参数?

感谢您的帮助!

回答

1

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

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

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

Route::get('test/(:any)', array('before' => 'permission:destroy|auth', 'use' => '[email protected]')); 

或修改您的过滤器使用func_get_args(),就像...

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

}); 
相关问题