2017-06-12 84 views
1

是否可以从__construct()函数中获取类中调用方法的名称?在类构造函数中找出调用的方法名称?

我有一个MVC应用程序,用户有权限,并且用户访问控制器(类)中的特定路由(方法),他们必须具有某些权限,我想在控制器的构造方法中定义,因为我不为了检查用户是否在每种方法中都具有某种权限,我不希望用重复代码来混乱我的控制器。

+0

您可能想要阅读以下内容:https:// stackoverflow。 com/a/9685039/727208 –

回答

0

是否有可能从 __construct()函数中获取被调用方法的名称?

不。调用方法时不会调用构造函数,而是在您创建对象的实例时调用构造函数。所以,当你调用方法的时候,构造函数已经完成了。

我想在控制器的构造方法来定义,因为我 不想弄乱我的重复代码控制器只是为了 检查,如果用户在每一个方法有一定的权限。

在这种情况下,你可以做一个protected函数,它的权限检查,然后调用从每个大众路线的方法:

class Controller 
{ 

    protected function checkPermissions($route) 
    { 
     // ... 
    } 

    public function someRoute() 
    { 
     $this->checkPermissions(__METHOD__); 
     // ... 
    } 

    public function someOtherRoute() 
    { 
     $this->checkPermissions(__METHOD__); 
     // ... 
    } 

} 

或者更好的,你可能有一些其他的代码它会自动实例化Controller对象,然后查找要触发的正确方法。如果是这样,您可以添加呼叫以检查该代码块的权限,然后根本不必触摸路由方法:

$controllerName = // determined by analyzing URL; 
$routeName = // determined by analyzing URL; 
if (!class_exists($controllerName)) { 
    throw new Exception('no such controller'); 
} 
$controller = new $controllerName(); 
if (!method_exists($controller, $routeName)) { 
    throw new Exception('no such route in controller'); 
} 
$controller->checkPermissions($routeName); 
$controller->$routeName(); 
+0

谢谢,第一个问题的答案让我感到很蠢(我在一段时间内没有做任何编码)。我已经应用了您提供的方法,但我只是对Laravel的授权方式感到好奇,但似乎更加先进。 –

相关问题