2010-09-08 121 views
0

出于某种原因,我的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] 好的,这是问题所在。它看起来像按钮和锚都在调用页面!所以第一次运行时,它是确定然后再次运行并重定向我:(

好了,我们走吧。学习新的东西每一天。

感谢您的帮助所有。

+0

你省略了代码的一些重要部分,例如一部分'显示不同view'和'做一些else' – 2010-09-09 07:24:59

+0

增加了更多的细节 – 2010-09-09 08:36:41

回答

0

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

删除该按钮。

0

我假设你的形式提交到/控制器/另一个/ ...

//在该动作中执行某些代码块会发生什么?因为我们知道它不是真的在做“if”和“else”相同的通行证......它必须在你没有在这里显示的“if”中做某件事,要么触发它回忆函数_forward(),要么以某种方式获得到第二次,然后评估你的逻辑的其他部分。

你可以发布更完整的样本来审查?

0

尝试用die()或$ this - > _ forward('page')替换您的重定向,以查看是否有任何php警告消息被重定向隐藏。

0

尝试以下操作:

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