quarta-feira, 29 de abril de 2009

Agrupando Erros do Zend_Form em uma mesma linha

Toda vez que utilizamos o método isValid para validar nossos campos e emitir os erros no formulário, por padrão o ZF mostra os erros em baixo de cada Elemento, que é onde fica o decorate "Errors". E talvez gostaríamos de mostrar ao usuário os erros de uma vez só, jogando tudo em apenas uma linha.

Para isso, nós utilizaremos os decorators da classe Zend_Form.

Nosso resultado final será como a figura abaixo:


Para o nosso exemplo, a seguinte classe esta montada:


class MeuForm extends Zend_Form
{

public function __construct($options = null)
{

parent::__construct($options);

$this->setMethod(’post’);

$username=new Zend_Form_Element_Text(’login’, array(

‘required’ => true,

‘label’ => ‘Login:’,

‘filters’ => array(’StringTrim’, ‘StringToLower’),

‘validators’ => array(

‘Alnum’,

array(’Regex’,false,array(’/^[a-z][a-z0-9]{2,}$/’))

)
));

$username->removeDecorator(’Errors’);



$password=new Zend_Form_Element_Password(senha’, array(

‘required’ => true,

‘label’ => ‘Senha:’,

‘filters’ => array(’StringTrim’),

‘validators’ => array(

‘NotEmpty’,

array(’StringLength’, false, array(6))

)
));

$password->removeDecorator(’Errors’);



$save=new Zend_Form_Element_Submit(’save’, array(

‘label’ => ’Salvar’,

‘required’=> false,

‘ignore’ => true,
));


$this->addElements(array($username, $password, $save));

$this->setDecorators(array(

‘FormElements’,

‘FormErrors’,

‘Form’

));

}

}




As linhas principais da nossa mudança são as seguintes:

$username->removeDecorator(’Errors’);
$password->removeDecorator(’Errors’);

Se você não utilizar o parametro removeDecorator, com certeza os erros apareceram em baixo de cada elemento de seu formulário.
Para os erros aparecerem agrupados, o seguinte decorator foi criado:
$this->setDecorators(array(

‘FormElements’,

‘FormErrors’,

‘Form’

));

quer incrementar mais ainda?
Então no lugar de criar o decorator acima, crie o seguinte decorator:

$this->setDecorators(array(

‘FormElements’,

new Zend_Form_Decorator_FormErrors(array(

‘ignoreSubForms’=>true,

‘markupElementLabelStart’=> ‘<b>’,

‘markupElementLabelEnd’=> ‘</b>’,

‘markupListStart’=>’<div>’

‘markupListEnd’ => ‘</div>’,

‘markupListItemStart’=>’<span>’,

‘markupListItemEnd’=>’</span>’,


)),

‘Form’

));


O código acima irá colocar os "Índices" dos erros em um div e em negrito e os erros dos validators (StringLength, Alnum, NotEmpty) em uma tag span.

Tenho estudado sobre como utilizar o Dojo ToolKit no ZF. Os formulários ficam show de bola!
Espero postar sobre o Dojo ToolKit no ZF ;)

Abraços Pessoal.

Nenhum comentário: