Zend Redirecting - PullRequest
       1

Zend Redirecting

0 голосов
/ 08 сентября 2010

По какой-то причине мое приложение 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>

Может ли якорь и кнопка вызыватьследующая страница?

[окончательное редактирование] Хорошо, это проблема.Похоже, что и кнопка, и якорь вызывают страницу!Итак, при первом запуске все в порядке, затем снова запускается и перенаправляет меня: (

Ну, вот и мы. Узнаем что-то новое каждый день.

Спасибо всем за помощь.

Ответы [ 4 ]

0 голосов
/ 20 марта 2015

Попробуйте следующее:

  $this->redirect()->toRoute('routeName',array('controller'=>'controllerName','action'=>'actionName'));
  $this->redirect()->toUrl('UrlLink')
0 голосов
/ 09 сентября 2010

попробуйте заменить ваш редирект на die () или $ this -> _ forward ('page'), чтобы проверить, не скрываются ли какие-либо предупреждения php при перенаправлении.

0 голосов
/ 26 сентября 2011

И кнопка, и якорь вызывают страницу! Итак, при первом запуске все в порядке, затем снова запускается и перенаправляет меня.

Удалена кнопка.

0 голосов
/ 08 сентября 2010

Я предполагаю, что ваша форма отправляется в / controller / another / ...

Что происходит с блоком кода // do do в этом действии? Так как мы знаем, что на самом деле это не то же самое, что и "if" и "else" на одном проходе ... оно должно делать что-то в "if", которое вы здесь не показываете, что либо вызывает его, чтобы вызвать функцию , _forward () или каким-то образом добирается до этой точки во второй раз, где затем оценивает остальную часть вашей логики.

Можете ли вы опубликовать более полный образец для обзора?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...