在类构造函数中找出调用的方法名称?
问题描述:
是否可以从__construct()
函数中获取类中调用方法的名称?在类构造函数中找出调用的方法名称?
我有一个MVC应用程序,用户有权限,并且用户访问控制器(类)中的特定路由(方法),他们必须具有某些权限,我想在控制器的构造方法中定义,因为我不为了检查用户是否在每种方法中都具有某种权限,我不希望用重复代码来混乱我的控制器。
答
是否有可能从 __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的授权方式感到好奇,但似乎更加先进。 –
您可能想要阅读以下内容:https:// stackoverflow。 com/a/9685039/727208 –