Cadre Zend :définir un champ de formulaire Zend_Form_Element obligatoire, comment puis-je changer le validateur utilisé pour garantir que l'élément n'est pas vide

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

  •  09-06-2019
  •  | 
  •  

Question

Lorsque vous utilisez un Zend_Form, la seule façon de valider qu'une entrée n'est pas laissée vide est de faire

$element->setRequired(true);

Si ce n'est pas défini et que l'élément est vide, il me semble que la validation n'est pas exécutée sur l'élément.

Si j'utilise setRequired(), l'élément reçoit automatiquement le validateur NotEmpty standard.Le problème est que le message d'erreur de ce validateur est nul : "La valeur est vide, mais une valeur non vide est requise".Je veux changer ce message.Pour le moment, je l'ai fait en changeant le Zend_Validate_NotEmpty classe, mais c'est un peu hacky.

J'aimerais idéalement pouvoir utiliser ma propre classe (dérivée de Zend_Validate_NotEmpty) pour effectuer la vérification non vide.

Était-ce utile?

La solution

Je l'ai fait de cette façon (ZF 1.5) :

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

donc, addValidator() est la partie intéressante.Le message est défini dans un « fichier de messages d'erreur » (pour regrouper tous les messages personnalisés dans un seul fichier) :

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

J'espère que cela t'aides...

Autres conseils

Par défaut, setRequired(true) indique à isValid() d'ajouter une validation NonEmpty s'il n'en existe pas déjà un.Puisque cette validation n'existe pas tant que isValid() n'est pas appelé, vous ne pouvez pas définir le message.

La solution la plus simple consiste simplement à ajouter manuellement une validation NonEmpty avant l'appel de isValid() et à définir son message en conséquence.

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

Ajoutez un validateur NotEmpty et ajoutez votre propre message :

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

Note que le validateur NotEmpty ne semble pas être déclenché à moins que vous n'ayez également appelé setRequired() sur l'élément.

Dans le contrôleur (ou ailleurs), appelez $form->setTranslator($yourTranslator) pour localiser le message d'erreur lorsqu'il est imprimé sur la page.

Changer la Message d'erreur.

D'aussi loin que je puisse voir Modification du message d'erreur n'a aucun moyen de modifier le message d'une erreur spécifique.De plus, le manuel donne l'impression qu'il s'agit d'une fonction appartenant à Zend_Form, mais j'obtiens une méthode introuvable lorsque je l'utilise sur une instance de Zend_Form.

Et un exemple d'utilisation serait vraiment génial.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top