2012-09-01 49 views
1

我有我的zend_form的自定義標記,我嘗試設置一個css類(class =「hasErrors」)到我的輸入字段。我的渲染表單元素看起來是這樣的:Zend_Form錯誤消息

<div id="teamname-element" class="formRow"> 
    <input type="text" name="teamname" id="teamname" value="" placeholder="Teamname"> 
</div> 

有錯誤,它看起來是這樣的:

<div id="teamname-element" class="formRow"> 
    <input type="text" name="teamname" id="teamname" value="" placeholder="Teamname"> 
    <ul class="errors"> 
     <li>Your teamname is to short!</li> 
    </ul> 
</div> 

是有可能設置一個CSS類輸入字段不使用JavaScript?

<input class="hasErrors" type="text" name="teamname" id="teamname" value="" placeholder="Teamname"> 

表單元素創建這樣的:

$this->addElement(new Nut_Form_Element_Text('teamname', array(
    'Label'  => 'Teamname', 
    'validators' => array(array('StringLength', FALSE, array(1, 25)), $TeamRegex), 
    'filters' => array('StringTrim', 'StripTags'), 
))); 

回答

1

在這裏,我們創建一個擴展Zend_Form的窗體類。我們重寫isValid()方法。如果hasErrors()方法返回true,我們通過form->元素循環並添加一個「error」類。我們還使用getAttrib()方法檢查是否已經存在一個類屬性,如果是這樣,我們使用空格來分隔「錯誤」類。

class MyForm extends Zend_Form 
{ 
    public function isValid($data) 
    { 
     $valid = parent::isValid($data); 

     foreach ($this->getElements() as $element) { 
      if ($element->hasErrors()) { 
       $oldClass = $element->getAttrib('class'); 
       if (!empty($oldClass)) { 
        $element->setAttrib('class', $oldClass . ' hasError'); 
       } else { 
        $element->setAttrib('class', 'hasError'); 
       } 
      } 
     } 

     return $valid; 
    } 
} 

現在,當您調用isValid方法時,它會自動爲任何未通過驗證的字段添加一個錯誤類。

+0

謝謝!比預期的簡單 – Slemgrim