2011-01-28 405 views
1

我不知道如何做到這一點:一旦行添加muy'添加'行動,我想發送用戶到我的'視圖'行動,以便他們可以看到提交的行。但看到它剛剛提交,我想向用戶顯示他們的數據已提交的成功消息。Zend在動作之間傳遞變量?

我展示我行是這樣的:url.com/view/32

我只是想,如果他們剛剛提交的東西,而不是當他們只是讀取數據,以顯示更迭的消息。

所以我想通過像$submitted = true這樣的東西給我的行動,但我不知道如何做到這一點。有什麼建議麼?

另外,我想到的另一種方法是檢查訪問者是否來自我的添加動作,如果是,則顯示成功消息。同樣,不知道如何做雖然這...

回答

4

flashMessenger動作助手是專爲在未來的顯示信息請求。

它使用會話來存儲信息。

+0

+1對於flashMessenger,我幾乎已經忘記了這一點,可能對於這種情況非常適用,請設置一條消息,然後將用戶重定向到viewAction並檢查並顯示消息。 – Scoobler 2011-01-29 14:01:45

1

你可以簡單地渲染視圖時addAction()成功:

return $this->render('view'); 

所以在persudeo:

的addAction():

  • 如果請求不是POST顯示空白添加表單。
  • 如果頁面是POST,但表單無效再重新顯示錶單。
  • 如果頁面是POST,表單有效,則呈現視圖。

你需要的一切傳遞給你的viewAction()做視圖腳本,但你也可以傳遞一個消息,現在將得到視圖腳本。

在你的view.phtml中只需使用一個php snipet來測試if (isset($this->message))echo "Data Added....";這樣當你使用普通的viewAction()時它不會顯示消息。這將使用戶在addAction()網址。

如果你想在移動用戶到不同的URL see the answeer here

+0

而是簡單地渲染視圖而沒有通過我的viewAction發送到視圖中的數據將無法正常工作()。我希望將用戶發送到一個新的URL,但我不會在URL中顯示我的數據 – networkprofile 2011-01-28 18:52:27

+0

您不會在url中傳遞數據,只需傳遞一個success = true變量即可。您的視圖操作將處理獲取新數據,您只需檢查成功參數,並在其中顯示視圖中的消息。如果您認爲您必須從viewaction構建數據,那麼您是正確的。 – Scoobler 2011-01-28 20:46:51

1

你可以通過會話變量發送數據(可以使用Zend_Session來處理)。當你到達你的視圖時,你檢查是否設置了會話變量,如果是,則顯示消息並使變量無效。這樣,如果用戶刷新頁面,消息不會再次顯示(這不是url params的情況,消息會再次顯示)。如果它沒有設置,你只是不顯示消息。

我用這個系統來顯示登錄屏幕上的消息,如果誰沒有登錄嘗試的用戶訪問受保護的部分,它工作得很好

+0

是的,我也一樣限制用戶訪問'訪客'頁面,但我認爲還有其他方式可以做到這一點。不要猜測,我會在會話中做到這一點..謝謝! – networkprofile 2011-01-28 19:28:34

1

嘗試這樣的事情::

if ($this->getRequest()->isPost()) { 
     if ($form->isValid($_POST)) { 
      $data = $form->getValues(); 
      $M = new Model_Xyz(); 
      $M->insert($data); 
      //now the magic, pass success param to to the viewAction() 
      return $this->_forward('view', null, null, array ('success' => 1)); 
     } 
    } 

現在成功的參數是傳遞到的viewAction()僅僅因爲它是在URL,這樣你就可以在控制器和視圖訪問它。祝你好運!

1

這裏和其他地方 研究Zend的幾個問題我特地爲你們的結論是,沒有一步步列表回答問題的Zend後 真的很爛 所以這裏有雲:

在form.html

<input type="text" name="field[input1]" id="input1" /> 
<input type="text" name="field[input2]" id="input2" /> 
在Controller.php這樣

public function addAction(){ 
     if ($this->getRequest()->isPost()){   
      $fields= $this->_getParam("field");   
      $this->view->msg = ($this->myDB->add($fields) ? "Add succeeded" : "Add failed"); 
      header("location: http://mysite.com/thepageiwantutogoto"); 
     } 
    } 

在view.pht毫升:

<?php echo $this->msg ?> 

BTW $this->myDB->add($fields)就是你有你的INSERT語句到數據庫