Estrutura Zend:definindo um campo de formulário Zend_Form_Element como obrigatório, como altero o validador usado para garantir que o elemento não esteja em branco
-
09-06-2019 - |
Pergunta
Ao usar um Zend_Form
, a única maneira de validar que uma entrada não foi deixada em branco é fazer
$element->setRequired(true);
Se não estiver definido e o elemento estiver em branco, parece-me que a validação não é executada no elemento.
Se eu usar setRequired()
, o elemento recebe automaticamente o validador NotEmpty padrão.O problema é que a mensagem de erro com este validador é uma droga, "O valor está vazio, mas é necessário um valor não vazio".Eu quero mudar esta mensagem.No momento eu fiz isso mudando o Zend_Validate_NotEmpty
classe, mas isso é um pouco hacky.
Eu gostaria idealmente de poder usar minha própria classe (derivada de Zend_Validate_NotEmpty
) para realizar a verificação não vazia.
Solução
Fiz assim (ZF 1.5):
$name = new Zend_Form_Element_Text('name');
$name->setLabel('Full Name: ')
->setRequired(true)
->addFilter('StripTags')
->addFilter('StringTrim')
->addValidator($MyNotEmpty);
então, addValidator() é a parte interessante.A mensagem é definida em um "Arquivo de mensagem de erro" (para agrupar todas as mensagens personalizadas em um arquivo):
$MyNotEmpty = new Zend_Validate_NotEmpty();
$MyNotEmpty->setMessage($trans->translate('err.IS_EMPTY'),Zend_Validate_NotEmpty::IS_EMPTY);
espero que isto ajude...
Outras dicas
Por padrão, setRequired(true) diz a isValid() para adicionar uma validação NonEmpty se ainda não existir.Como esta validação não existe até que isValid() seja chamado, você não pode definir a mensagem.
A solução mais fácil é simplesmente adicionar manualmente uma validação NonEmpty antes de isValid() ser chamada e definir sua mensagem de acordo.
$username = new Zend_Form_Element_Text('username');
$username->setRequired(true)
->addValidator('NotEmpty', true, array('messages' => array('isEmpty' => 'Empty!')));
Adicione um validador NotEmpty e adicione sua própria mensagem:
// In the form class:
$username = $this->createElement('text', 'username');
$username->setRequired(); // Note that this seems to be required!
$username->addValidator('NotEmpty', true, array(
'messages' => array(
'isEmpty' => 'my localized err msg')));
Observação que o validador NotEmpty não parece ser acionado, a menos que você também tenha chamado setRequired() no elemento.
No controlador (ou em qualquer outro lugar), chame $form->setTranslator($yourTranslator) para localizar a mensagem de erro quando ela for impressa na página.
Mudar o mensagem de erro.
Tanto quanto eu posso ver Alterando a mensagem de erro não tem como alterar a mensagem de um erro específico.Além disso, o manual faz com que pareça que esta é uma função pertencente ao Zend_Form, mas recebo um método não encontrado ao usá-lo em uma instância do Zend_Form.
E um exemplo de uso seria realmente ótimo.