0

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

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

谢谢你的帮助!

4

1 回答 1

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

});
于 2013-04-11T14:14:29.793 回答