出于某种原因,我的zend应用程序在不应该重定向时。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;
}
所以我instantialising一种形式,如果用户帖子的形式,然后再验证,并在会话变量存储在闪存会话,并显示出目前存在的观点。在所有情况下显示表单(如果已发送,则会自动填充)。
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);
}
}
在此操作中,我正在检查会话。如果它有表单数据,则尝试发送电子邮件并设置变量;否则重定向回表单。视图变量用于显示一条消息或其他(邮件发送/电子邮件发送失败)。
问题出在这里:无论如何它都会重定向到表单。表单提交并确认后,我们转到下一页,它会执行某些操作,然后重定向到带有表单的页面。为什么它这样做,我该如何阻止它?
情节变厚:如果我在新选项卡中打开确认链接,它将运行并正确停止。如果我在同一个选项卡/窗口中执行它,它会运行两次并重定向。
[另一编辑] 我已经删除了第二个操作中的所有代码。 代码现在是:
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>
能锚和按钮都可以调用下一个页面?
[final edit] 好的,这是问题所在。它看起来像按钮和锚都在调用页面!所以第一次运行时,它是确定然后再次运行并重定向我:(
好了,我们走吧。学习新的东西每一天。
感谢您的帮助所有。
你省略了代码的一些重要部分,例如一部分'显示不同view'和'做一些else' – 2010-09-09 07:24:59
增加了更多的细节 – 2010-09-09 08:36:41