Quadro Zend:impostando un campo modulo Zend_Form_Element come obbligatorio, come posso modificare il validatore utilizzato per garantire che l'elemento non sia vuoto

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

  •  09-06-2019
  •  | 
  •  

Domanda

Quando si utilizza a Zend_Form, l'unico modo per verificare che un input non venga lasciato vuoto è fare

$element->setRequired(true);

Se questo non è impostato e l'elemento è vuoto, mi sembra che la convalida non venga eseguita sull'elemento.

Se uso setRequired(), all'elemento viene assegnato automaticamente il validatore NotEmpty standard.Il fatto è che il messaggio di errore con questo validatore fa schifo, "Il valore è vuoto, ma è richiesto un valore non vuoto".Voglio cambiare questo messaggio.Al momento l'ho fatto modificando il file Zend_Validate_NotEmpty classe, ma questo è un po' complicato.

Idealmente mi piacerebbe poter utilizzare la mia classe (derivata da Zend_Validate_NotEmpty) per eseguire il controllo di non vuoto.

È stato utile?

Soluzione

L'ho fatto in questo modo (ZF 1.5):

$name = new Zend_Form_Element_Text('name');
$name->setLabel('Full Name: ')
     ->setRequired(true)
     ->addFilter('StripTags')
     ->addFilter('StringTrim')
     ->addValidator($MyNotEmpty);

quindi, addValidator() è la parte interessante.Il messaggio è impostato in un "file di messaggi di errore" (per raggruppare tutti i messaggi personalizzati in un unico file):

$MyNotEmpty = new Zend_Validate_NotEmpty();
$MyNotEmpty->setMessage($trans->translate('err.IS_EMPTY'),Zend_Validate_NotEmpty::IS_EMPTY);

spero che questo ti aiuti...

Altri suggerimenti

Per impostazione predefinita, setRequired(true) indica a isValid() di aggiungere una convalida NonEmpty se non ne esiste già uno.Poiché questa convalida non esiste finché non viene chiamato isValid(), non è possibile impostare il messaggio.

La soluzione più semplice è semplicemente aggiungere manualmente una convalida NonEmpty prima che venga chiamato isValid() e impostare il messaggio di conseguenza.

$username = new Zend_Form_Element_Text('username');
$username->setRequired(true)
         ->addValidator('NotEmpty', true, array('messages' => array('isEmpty' => 'Empty!')));

Aggiungi un validatore NotEmpty e aggiungi il tuo messaggio:

// 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')));

Nota che il validatore NotEmpty non sembra essere attivato a meno che tu non abbia chiamato anche setRequired() sull'elemento.

Nel controller (o ovunque), chiama $form->setTranslator($yourTranslator) per localizzare il messaggio di errore quando viene stampato sulla pagina.

Cambiare il messaggio di errore.

Per quanto posso vedere Modifica del messaggio di errore non ha modo di modificare il messaggio di un errore specifico.Inoltre il manuale fa sembrare che questa sia una funzione appartenente a Zend_Form, ma ottengo un metodo non trovato quando lo utilizzo su un'istanza di Zend_Form.

E un esempio dell'utilizzo sarebbe davvero fantastico.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top