如何修复无限重定向循环?

时间:2017-10-14 07:26:10

标签: php redirect

我正在运行自己的MVC结构而且我遇到了一个问题,我无法弄清楚如何解决或修复问题。我已经查看了其他各种问题,例如12以及许多其他不太有帮助的问题。

我在数据库中有一个表,用于返回用户的信息,如果找不到该信息,则将其重定向到页面以强制他们提交数据。

我创建了一个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,但这不是我需要的。

1 个答案:

答案 0 :(得分:1)

您的/ app / personalization控制器的before函数中不应该有parent::before();个调用。您可以在该类中实现requirePersonality(),但避免重定向到同一个控制器。

相关问题