2012-01-24 10 views
5

В моем текущем приложении я хотел бы покрасить опции выбора красным, если они содержат ошибочную информацию (она же не проверена). Если элемент формы содержит одну или несколько ошибок, он должен иметь класс ошибок (поэтому я могу соответствующим образом изменить стиль). Я пробовал прокручивать элементы и видеть, проверяются ли они, но это очень быстро уродливо.Zend_Form_Element: добавить класс, если он содержит ошибки

Как бы это сделать лучше?

Благодаря

Edit: Это мой текущий обходной путь (и получает работу, но бесчестно)

$post = $request->getPost(); 
foreach ($contactForm->getElements() as $element) { 
    if (!$element->isValid($post[$element->getName()])) { 
     $element->setAttrib('class', 'error'); 
    } 
} 

ответ

5

Вот несколько мыслей ...

  1. Вместо вызова isValid для каждого элемента формы, вы можете проверить всю свою форму с помощью isValid, а затем перебирать элементы, как вы в своем вопросе, но вместо этого используйте if ($element->hasErrors()), чтобы определить, ou нужно добавить класс ошибки к элементу.

  2. Возможно, вы захотите расширить форму Zend_Form и добавить вспомогательный метод в новый класс Form, который сделает это за вас. Например, добавьте метод с именем highlightErrorElements() или что-то в этом роде, и если у вас есть неудачный вызов $form->isValid(), вы можете просто вызвать $form->highlightErrorElements(), который будет перебирать каждый элемент формы и видеть, есть ли у него ошибки и при необходимости применить стиль.

Пример:

<?php 

class Application_Form_Base extends Zend_Form 
{ 
    public function __construct() 
    { 
     // this is where i normally set up my decorators for the form and elements 
     // additionally you can register prefix paths for custom validators, decorators, and elements 

     parent::__construct(); 
     // parent::__construct must be called last because it calls $form->init() 
     // and anything after it is not executed 
    } 

    public function highlightErrorElements() 
    { 
     foreach($this->getElements() as $element) { 
      if($element->hasErrors()) { 
       $element->setAttrib('class', 'error'); 
      } 
     } 
    } 
} 

где-то в контроллере ...

$form = new Application_Form_Register(); // this extends Application_Form_Base 
if ($form->isValid($this->getRequest()->getPost())) { 
    // add user etc 
} else { 
    $form->highlightErrorElements(); 
    // other error logic 
} 

$this->view->form = $form; 
Смежные вопросы