1

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

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

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

}

但显然这在 Laravel 4 中不起作用。模拟 __call 魔术方法的正确方法是什么?我想到了之前的过滤器,但它们没有被传递给被调用的方法名称和参数

4

1 回答 1

4

__call是一个魔术方法,当该方法在类中不存在时调用。所以我看不出这对你有什么帮助。

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

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

});

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

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

Route::group(array('before' => 'permissions'), function()
{
    Route::get('/', function() { });
});
于 2013-06-05T06:03:49.617 回答