По какой-то причине мое приложение Zend перенаправляет, когда оно не должно.
Представление индекса просто показывает форму.Следующее представление показывает некоторую информацию из базы данных на основе информации, предоставленной формой.Затем пользователь нажимает кнопку подтверждения, которая отправляет их другому действию, которое создает и отправляет электронное письмо.У меня есть блок try / catch, где он пытается отправить электронное письмо.В случае успеха установите одну переменную, в противном случае установите другую.
Псудокод:
public function indexAction()
{
$form = new Form();
if(!empty($_POST))
{
if($form->isValid($_POST))
{
$this->_helper->FlashMessenger($_POST); //store $_POST in temporary session
//show a different view
//do something else
}
}
$this->view->form = $form;
}
Поэтому я создаю экземпляр формы, если пользователь публикует форму, затем проверяет ее и сохраняетпеременные сеанса во флэш-сеансе и показывают другое представление.Во всех случаях показывайте форму (если она была отправлена, то она будет автоматически заполнена).
public function anotherAction()
{
$messages = $this->_helper->FlashMessenger->getMessages();
if (!empty($messages[0]))
{
$post = $messages[0];
$mail = new My_Mail();
//set up email
try
{
$mail->send();
$success = true;
}
catch (Zend_Exception $e)
{
$success=false;
//save $e to log
}
$this->view->success = $success;
}
else
{
//if not sent here by /page, then redirect to it.
$this->_helper->redirector->goToRouteAndExit(array(), 'page', true);
}
}
В этом действии я проверяю сеанс.Если в нем есть данные формы, попробуйте отправить электронное письмо и установить переменную;в противном случае перенаправьте обратно в форму.Переменная view используется для отображения одного или другого сообщения (электронное письмо отправлено / электронное письмо не было отправлено).
Вот проблема: она все равно перенаправляет обратно на форму.Форма отправлена и подтверждена, мы переходим на следующую страницу, где она что-то делает, затем перенаправляет обратно на страницу с формой на ней.Почему он это делает и как мне это остановить?
[править] График утолщается: если я открою ссылку подтверждения в новой вкладке, она будет работать и останавливаться правильно.Если я делаю это в той же вкладке / окне, он запускается дважды и перенаправляет.
[еще одно редактирование] Я удалил весь код во втором действии.Код теперь:
public function anotherAction()
{
$messages = $this->_helper->FlashMessenger->getMessages();
if (!empty($messages[0]))
{
;
}
else
{
$this->_helper->redirector->goToRouteAndExit(array(), 'page', true);
}
}
и он все еще перенаправляет.
Для кнопки подтверждения у меня есть
<a href="next-page"><button>Confirm</button></a>
Может ли якорь и кнопка вызыватьследующая страница?
[окончательное редактирование] Хорошо, это проблема.Похоже, что и кнопка, и якорь вызывают страницу!Итак, при первом запуске все в порядке, затем снова запускается и перенаправляет меня: (
Ну, вот и мы. Узнаем что-то новое каждый день.
Спасибо всем за помощь.