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

StackOverflow https://stackoverflow.com/questions/34848

  •  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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top