2013-01-24 30 views
2

我是ZF的新手,在用戶提交表單(例如登錄表單)之後,Google搜索了一下以找到一種裝飾登錄表單的方法。提交和處理後,如果它是無效的,我想顯示twitter上的bootstraps警報字段填充不正確。如何裝飾不成功的submision後的表單ZF 1.12

  1. 我應該創建一個控制形式和模式,如果形式!isValid()應該產生的形式從那裏建立額外的裝飾?
  2. 我是否應該在會話中設置所有內容並在渲染視圖和裝飾後清除它們的變量?
  3. 或者我應該使用其他一些神祕的方法?

回答

1

我傾向於將錯誤與他們的元素保持一致。但是,就像你一樣,我也更喜歡在頂部有一個表單級警報,告訴用戶有一些需要解決的問題。在視圖腳本

if ($form->isValid($postData)){ 
    // write to db and redirect 
} else { 
    $this->view->hasFormError = true; 
} 
$this->view->form = $form; 

然後:

對於這一點,我通常在我的控制器中添加一個標誌

<?php if ($this->hasFormError): ?> 
<!-- my alert box, using Bootstrap or whatever --> 
<?php endif; ?> 
<?= $this->form ?> 

這幾乎是肯定的雨衣到FormError裝飾添加到窗體本身。它檢查是否有任何表單元素有錯誤,然後呈現警報。然後,你的控制器和視圖腳本變得更爲精簡:

控制器:

if ($form->isValid($postData)){ 
    // write to db and redirect 
} 
$this->view->form = $form; 

查看腳本:

<?= $this->form ?> 

但是當面對定義另一個裝飾,設置裝飾前綴,然後將它添加到表單中,我承認我通常便宜,並使用in-controller標誌。

[原則上,我認爲應用裝飾器的整個想法應該是視圖層的一部分,而不是表單定義本身的一部分。根據這一理念,我會保持表單不被修飾,直到我們點擊視圖腳本,此時我們可以應用一些添加所有修飾器的視圖助手。這是 - 在某種程度上被修改的意義上 - ZF2所做的。但我從來沒有時間太深入地追求這條道路。]

1

這些都是thow方法,我用它來顯示錯誤消息:

我留在我的所有領域的標準誤差裝飾未變化來顯示特定的信息(如:無效的電子郵件)

我也使用flashMessenger顯示一個通用消息像

Errors occured while validating the form: 
* Email 
* ... 

flashMessenger的是,具有等效視圖助手的動作輔助。 flashMessenger是一跳會話消息,一旦顯示就自動從會話中清除。

更多關於flashMessenger

+0

你的答案幫了我很多,但我會接受@David給出的答案,因爲它更具有建設性,幷包含對於新手來說很有用的代碼。 –