2011-02-11 68 views
1

對於一個形式,我用下面的代碼每個輸入字段/ Zend的形式顯示錯誤:Zend的形式顯示了所有的錯誤上面

class Application_Form_User_Register extends Zend_Form 
{ 
    public function init() 
    { 
     $email = new Zend_Form_Element_Text('email'); 
     $email->setLabel('Email adres: (*)') 
     ->setRequired(true) 
     ->addErrorMessage('Het veld Email adres is verplicht') 
     ->addValidator('StringLength', false,array(6,100)) 
     ->addErrorMessage('Het email adres dient uit minstens 6 karakters te bestaan') 
     ->addValidator('EmailAddress') 
     ->addErrorMessage('Het veld Email adres moet een geldig email adres bevatten') 
     ->addFilter('StringTrim'); 
     $this->addElement($email); 
    } 
} 

當我從張貼這種形式的一個錯誤的電子郵件地址,它會顯示所有3錯誤消息。

例如:如果我發佈「thisisa @ nonvalidadress」,它會顯示所有錯誤,包括錯誤「電子郵件地址至少應爲6個字符」。

有沒有辦法改變這種行爲?

然後第二個問題......有沒有辦法顯示相應輸入字段上方的錯誤信息? 默認情況下,錯誤消息顯示在下方。

回答

1

addValidator()方法的第二個參數是breakChainOnFailure metacommand。只要設置爲true即可。所以,你會做

class Application_Form_User_Register extends Zend_Form 
{ 
public function init() 
{ 
    $email = new Zend_Form_Element_Text('email'); 
    $email->setLabel('Email adres: (*)') 
    ->setRequired(true) 
    //->addErrorMessage('Het veld Email adres is verplicht') 
    ->addValidator('StringLength', true, array(6,100)) 
    //->addErrorMessage('Het email adres dient uit minstens 6 karakters te bestaan') 
    ->addValidator('EmailAddress', true) 
    //->addErrorMessage('Het veld Email adres moet een geldig email adres bevatten') 
    ->addFilter('StringTrim'); 
    $this->addElement($email); 
} 

}

這將打破校驗器鏈,如果它失敗了。

下面是Zend框架的網站約自定義的驗證消息說: 有些開發者可能想爲校驗器提供定製的錯誤消息提供定製的校驗錯誤消息:

注意。 Zend_Form_Element :: addValidator()方法的$ options參數允許您通過提供鍵「消息」並將其映射到用於設置消息模板的鍵/值對數組來實現此目的。您需要知道特定驗證器的各種驗證錯誤類型的錯誤代碼。 更好的選擇是在表單中使用Zend_Translate_Adapter。錯誤代碼通過默認的Errors修飾器自動傳遞給適配器;您可以通過爲驗證器的各種錯誤代碼設置翻譯來指定您自己的錯誤消息字符串。

有關詳細信息,請參閱本:http://framework.zend.com/manual/en/zend.form.elements.html

你的第二個問題,改變在錯誤信息出現時,需要對這些表單元素定製裝飾。你絕對可以做到這一點,並不像起初看起來那麼困難。這篇文章確實幫助我理解了裝飾器:http://devzone.zend.com/article/3450

+0

謝謝你的回覆,不幸的是addValidator設置中的真正選項,不是溶劑。錯誤仍然顯示:( – Arthur 2011-02-11 21:35:12

1

Sudol是正確的,通過breakChainOnFailure參數,以防止在第一次失敗後停止驗證。

但你的問題是在你調用元素的方法addErrorMessage()。此方法設置將在元素驗證失敗時顯示的錯誤消息,但它不指定消息和失敗的驗證程序之間的任何連接。這就是爲什麼每次您的驗證器失敗時都會收到全部三條消息。

所以你需要做的是爲每個驗證器而不是元素指定錯誤消息。

$emailValidator = new Zend_Validate_EmailAddress(); 
$emailValidator->setMessage('Het veld Email adres moet een geldig email adres bevatten'); 

$email->addValidator($emailValidator); 

或者,你可能想使用Zend_Translate爲翻譯標準的錯誤消息。

2

首先問題得到解答。第二個應該沿着這條線:

$element->getDecorator('Errors')->setPlacement('prepend');