可以从__construct()
函数获取类中被调用方法的名称吗?
我有一个MVC应用程序,其中用户有权限,对于用户来说,要访问控制器(类)中的特定路由(方法)--他们必须具有某些权限--我想在控制器的构造函数方法中定义这些权限,因为我不想用重复的代码干扰控制器,只是为了检查用户在每个方法中是否有特定的权限。
发布于 2017-06-12 17:20:10
可以从__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();
https://stackoverflow.com/questions/44504136
复制相似问题