2010-05-16 54 views
2

那麼,形式和成功輸出

這是一個初學者的問題,但我真的不知道什麼是最好的方式。 我在我的項目中有一個基本的CRUD(創建,檢索,更新和刪除),並且如果成功或者不想在div內輸出一些消息在同一頁面內。

所以,基本上,我有一個動作設置爲同一個頁面的形式,我有以下我想輸出類似註冊附帶成功此相同形式的DIV #statusDiv

什麼是這樣做的最佳方式?

  • 在控制器中設置一個標誌$this->view->flagStatus = 'message'然後在視圖中調用它?

只是爲了更清楚。這是我的代碼:

//IndexController.php indexAction() 

... 

//Check if there's submitted data 
if ($this->getRequest()->isPost()) { 
    ... 
    $registries->insert($data); 
    $this->view->flagStatus = 'message'; 
} 

然後我的觀點:

.... 
<?php if ($this->flagStatus) { ?> 
    <div id="divStatus" class="success span-5" style="display: none;"> 
     <?php echo $this->flagStatus; ?> 
    </div> 
<?php } ?> 
.... 

回答

6

在這種情況下,因爲你要重定向的$這個 - >查看 - > flagStatus將會丟失。相反,你應該用的是以FlashMessenger動作助手:

http://framework.zend.com/manual/en/zend.controller.actionhelpers.html

基本上你使用它,就像你是目前,除了你會改變:

$this->view->flagStatus = 'message'; 

$this->_helper->flashMessenger->addMessage('message'); 

之後,您需要將flashMessenger對象發送到視圖。你應該在得到每個頁面請求執行的地方這樣做,所以你可以發送郵件到任何頁面:

$this->view->flashMessenger = $this->_helper->flashMessenger; 

,然後更改視圖到:

<?php if($this->flashMessenger->hasMessages(): ?> 
    <div id="divStatus" class="success span-5" style="display: none;"> 
     <?php $messages = $this->flashMessenger->getMessages(); ?> 
     <?php foreach($messages as $message): ?> 
     <p><?= $message; ?></p> 
     <?php endforeach; ?> 
    </div> 
<?php endif; ?> 

希望這有助於!

+0

yeahh!這幫了很大的忙! thx的答案..我只是犯了一個錯誤,我不打算重定向。不過,這是做這件事的最好方法嗎?我應該怎麼做沒有重定向? – 2010-05-16 06:56:15

+0

我更喜歡在表單發佈之後重定向,因爲它清除了發佈請求並允許用戶刷新頁面而無需雙擊提交表單。 如果你不想重定向,你可以使用你描述的方法,它應該工作正常。 – Aaron 2010-05-16 23:39:25

+1

你缺少一個右括號'flashMessenger-> hasMessages():??>'應該是' flashMessenger-> hasMessages()):? >' – Shoan 2011-08-17 13:50:13