Php Zend重定向

Php Zend重定向,php,zend-framework,Php,Zend Framework,由于某些原因,我的zend应用程序在不应该重定向的情况下重定向 索引视图只是显示表单。下一个视图根据表单提供的信息显示数据库中的一些信息。然后,用户单击确认按钮,将其发送给另一个操作,该操作构造并发送电子邮件。我有一个try/catch块,它试图发送电子邮件。如果成功,设置一个变量,否则设置另一个变量 Psudo代码: public function indexAction() { $form = new Form(); if(!empty($_POST)) { if($form-&g

由于某些原因,我的zend应用程序在不应该重定向的情况下重定向

索引视图只是显示表单。下一个视图根据表单提供的信息显示数据库中的一些信息。然后,用户单击确认按钮,将其发送给另一个操作,该操作构造并发送电子邮件。我有一个try/catch块,它试图发送电子邮件。如果成功,设置一个变量,否则设置另一个变量

Psudo代码:

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;
}
因此,我正在实例化一个表单,如果用户发布表单,然后验证它,并将会话变量存储在flash会话中,并显示不同的视图。在所有情况下,如果表单已发送,则会自动填充表单

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>
锚和按钮是否都会调用下一页

[最后编辑] 好的,这就是问题所在。看起来按钮和锚都在调用页面!因此,它第一次运行时没有问题,然后再次运行并重定向我:

好了,我们开始了。每天学习新的东西


谢谢大家的帮助。

我假设您的表单已提交给/controller/other/

在//do something代码块中该操作会发生什么?因为我们知道它并不是在同一个过程中同时做if和else。。。它一定是在if中做了一些事情,你没有在这里显示,或者触发它调用函数,_forward's,或者以某种方式第二次到达这一点,然后评估逻辑的其他部分


您可以发布一个更完整的示例以供查看吗?

尝试用骰子或$this->\u forward“page”替换重定向,以查看重定向是否隐藏了任何php警告消息。

按钮和锚都在调用页面!所以它第一次运行时没问题,然后再次运行并重定向我

已删除按钮。

请尝试以下操作:

  $this->redirect()->toRoute('routeName',array('controller'=>'controllerName','action'=>'actionName'));
  $this->redirect()->toUrl('UrlLink')

您省略了代码中的一些重要部分,例如用于显示不同视图的部分,并执行了其他操作