2012-09-01 2 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 클래스를 설정할 수 있습니다?

<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() 메소드를 오버라이드 (override)합니다. hasErrors() 메서드가 true를 반환하면 form-> 요소를 반복하고 "error"클래스를 추가합니다. getAttrib() 메소드를 사용하여 클래스 속성이 이미 존재하는지 확인하기위한 검사도 수행하고, 그렇다면 별도의 공간을 사용하여 "error"클래스를 추가합니다.

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