Мы пытаемся добавить пару действий в AccountController, чтобы добавить еще одно действие после действия Forgotpasswordpost. Проблема в том, что если мы добавим действие в логику preDispatch, чтобы убедиться, что вам не нужно входить в нее, она все равно перенаправляет обратно на страницу входа.
public function preDispatch()
{
// a brute-force protection here would be nice
parent::preDispatch();
if (!$this->getRequest()->isDispatched()) {
return;
}
$action = $this->getRequest()->getActionName();
if (!preg_match('/^(create|login|logoutSuccess|forgotpassword|forgotpasswordpost|confirm|confirmation|newactionhere)/i', $action)) {
if (!$this->_getSession()->authenticate($this)) {
$this->setFlag('', 'no-dispatch', true);
}
} else {
$this->_getSession()->setNoReferer(true);
}
}
Это не работает, потому что мы сначала вызываем родителя, который также выполняет это, но, конечно, preg_match не совпадает, и он запускает метод authenticate, который запускает метод $ action-> getResponse () -> setRedirect ( $ url), который, конечно, устанавливает заголовок, и когда он возвращается к нашему коду, это не имеет значения, а затем перенаправляет.
Мы могли бы просто удалить вызов родителя, но я не уверен, что это лучший подход, так как родитель также вызывает своего родителя, который запускает некоторые вещи для установки области макета, а затем также вызывает родительский метод. Я думал просто вызвать родителя с помощью Mage_Core_Controller_Front_Action, но не был уверен, что это был правильный подход.