-1

不知何故,當我在以下設置中使用gotoSimple時,我的數據將在secondAction()中保存兩次$object->save()gotoSimple()在重定向之前似乎重新加載到當前操作

public function firstAction(){ 
    // get data 

    // process postdata, if any 

    if($form->isValid($postdata)) { 
     $this->_helper->getHelper('Redirector')->gotoSimple('second'); 
    } 

} 

public function secondAction(){ 

    // get data 

    // process postdata, if any 

    if($form->isValid($postdata)) { 
     if($object->save($postdata)) { 
      // set flashmessage 
      $this->_helper->getHelper('Redirector')->gotoSimple('index'); 
     } 
    } 

} 

調試的時間我都來,不知怎的,在secondAction()gotoSimple()命令觸發secondAction()它重定向到indexAction()之前結束之後。我確信indexAction()不可能重定向到secondAction()

更有趣的是:這隻發生在IE7和IE8中。任何人都可以以任何可能的方向指出這個奇怪的行爲可能來自哪裏以及我如何解決這個問題?

UPDATE 通過gotoSimple()命令之前正確使用的代碼secondAction()以下行,我可以肯定的是,不知何故,當我按下提交按鈕的secondAction()調用兩次100%:

if(isset($_SESSION['xyz-zyx'])) { 
    $this->_helper->getHelper('flashMessenger')->addMessage('I\'ve already been here!'); 
    unset($_SESSION['xyz-zyx']); 
} 
$_SESSION['xyz-zyx'] = true; 

有沒有想法?

+0

剛剛檢查,但設置重定向器的代碼不會改變任何內容。 –

+0

您是否使用執行重定向的重寫規則?重定向後,$ _POST數據不應該可用了... –

+0

是的,我正在使用重寫規則,但我不依賴$ _POST這裏,當我離開firstAction時,我將數據存儲在會話對象中),它在secondAction()中可用。你可以看到這個設置是一個非常簡單的嚮導。事情是,我可以在保存後取消設置會話對象,但是第二次重定向激活控制器代碼時會觸發錯誤。一個可能的解決方法是檢查$ _POST params,但是之後仍然會有第二次激活代碼...數據不會被保存兩次,也不會出現錯誤...但仍然存在。 –

回答

0

看來問題是由於使用Zend_DataGrid(BvBGrid)引起的。重寫了整個行動並修復了問題:)

1

檢查您的服務器日誌或監控您的網絡,您將看到瀏覽器在實際重定向之前發送兩次相同的請求。

我在瀏覽器中看到很多行爲,他們發送請求兩次。有幾個原因,但也有附加組件,其中發出第二個與您的應用程序混亂的請求。在一種情況下,它就像缺少favicon.ico或圖像文件的鏈接斷開一樣簡單。這一切都很好,在開始使用會話狀態或表單提交之前,不會打擾您。

一旦您知道什麼觸發了第二個請求,您不僅應該修復該問題,還應該添加其他措施以防止來自任何瀏覽器的第二次請求。