我正在构建一个权限系统,我需要对每个控制器的每个方法都有粒度,所以我想在我的基本控制器上使用__call魔术方法来实现这一点,如下所示:
public function __call($name, $args)
{
if ( $this->checkPermission() )
{
call_user_func_array(array($this, $name), $args);
}
else
{
// handle error
}
}
但显然这在Laravel 4中不起作用。如何正确地模仿__call魔法?我在过滤器之前想过但是它们没有被称为方法名称和参数
答案 0 :(得分:3)
__call
是一种魔法方法,当该方法不存在于类中时调用。所以我不明白这对你有什么帮助。
我的建议是使用前置过滤器,因为您可以访问当前路由和请求。
Route::filter('permissions', function($route, $request)
{
});
然后,您可以使用$route->getAction()
之类的方法来提取将被调用的控制器和方法,并$route->getParameters()
或$request->segment()
来获取参数。
只需在已应用此过滤器的组内注册所有路由。
Route::group(array('before' => 'permissions'), function()
{
Route::get('/', function() { });
});