我正在运行自己的MVC结构而且我遇到了一个问题,我无法弄清楚如何解决或修复问题。我已经查看了其他各种问题,例如1,2以及许多其他不太有帮助的问题。
我在数据库中有一个表,用于返回用户的信息,如果找不到该信息,则将其重定向到页面以强制他们提交数据。
我创建了一个Authenticated类,它扩展了控制器(包含重定向方法):
abstract class Authenticated extends \Core\Controller {
protected function before() {
$this->requirePersonality();
}
protected function requirePersonality(){
if(!(new PlannerAuth())->getPersonality()){
$this->redirect('/app/personalization');
}
}
}
在我的App Controller中我得到了:
class App extends Authenticated {
protected function before(){
parent::before();
}
public function personalizationAction(){
View::renderTemplate('App/personalization.html');
}
}
before()方法将在任何操作方法之前运行,因此当我在应用程序中运行任何url时,会发生以下逻辑:
身份验证before()
会运行,将我重定向到 / app / personalization ,在那里,它会检查当前的before()
,再次重新运行身份验证before()
方法,以及......创造一个无限循环。
我还有一个after()
方法,它将在所有方法之后运行,但由于它不会强迫用户进入个性化页面,因此无法工作。
这只会在我在App控制器中运行任何方法时发生,我可以在另一个控制器中使用personalizationAction
,但这不是我需要的。
答案 0 :(得分:1)
您的/ app / personalization控制器的before函数中不应该有parent::before();
个调用。您可以在该类中实现requirePersonality()
,但避免重定向到同一个控制器。