Laravel 4魔法__call替换控制器

时间:2013-06-05 05:16:33

标签: laravel laravel-4

我正在构建一个权限系统,我需要对每个控制器的每个方法都有粒度,所以我想在我的基本控制器上使用__call魔术方法来实现这一点,如下所示:

public function __call($name, $args)
{       
    if ( $this->checkPermission() )
    {

        call_user_func_array(array($this, $name), $args);
    }
    else 
    {
        // handle error
    }

}

但显然这在Laravel 4中不起作用。如何正确地模仿__call魔法?我在过滤器之前想过但是它们没有被称为方法名称和参数

1 个答案:

答案 0 :(得分:3)

__call是一种魔法方法,当该方法不存在于类中时调用。所以我不明白这对你有什么帮助。

我的建议是使用前置过滤器,因为您可以访问当前路由和请求。

Route::filter('permissions', function($route, $request)
{

});

然后,您可以使用$route->getAction()之类的方法来提取将被调用的控制器和方法,并$route->getParameters()$request->segment()来获取参数。

只需在已应用此过滤器的组内注册所有路由。

Route::group(array('before' => 'permissions'), function()
{
    Route::get('/', function() { });
});