是否可以從__construct()
函數中獲取類中調用方法的名稱?在類構造函數中找出調用的方法名稱?
我有一個MVC應用程序,用戶有權限,並且用戶訪問控制器(類)中的特定路由(方法),他們必須具有某些權限,我想在控制器的構造方法中定義,因爲我不爲了檢查用戶是否在每種方法中都具有某種權限,我不希望用重複代碼來混亂我的控制器。
是否可以從__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();
謝謝,第一個問題的答案讓我感到很蠢(我在一段時間內沒有做任何編碼)。我已經應用了您提供的方法,但我只是對Laravel的授權方式感到好奇,但似乎更加先進。 –
您可能想要閱讀以下內容:https:// stackoverflow。 com/a/9685039/727208 –