2008-08-29 8 views
4

Lorsque vous utilisez un Zend_Form, la seule façon de valider qu'une entrée n'est pas vide est de faire Si ce paramètre 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.Zend Framework: définition d'un champ de formulaire Zend_Form_Element requis, comment modifier le validateur utilisé pour garantir que l'élément n'est pas vide

Si j'utilise setRequired(), l'élément reçoit automatiquement le validateur NotEmpty standard. La chose est que le message d'erreur avec ce validateur suce, "La valeur est vide, mais une valeur non vide est requise". Je veux changer ce message. En ce moment j'ai fait ceci en changeant la classe Zend_Validate_NotEmpty, 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.

Répondre

3

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, le addValidator() est la partie intéressante. Le message est défini dans un "fichier errorMessage" (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); 

espérons que cette aide ...

0

Pour autant que je peux voir Changing the error message n'a aucun moyen de changer le message d'erreur spécifique. De plus, le manuel donne l'impression que c'est une fonction appartenant à Zend_Form, mais j'obtiens une méthode introuvable lors de son utilisation sur une instance de Zend_Form.

Et l'exemple de l'utilisation serait vraiment génial.

3

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

La solution est plus facile de simplement ajouter manuellement une validation de NonEmpty avant isValid() est appelé et mis son message en conséquence.

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

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

Remarque que le validateur NotEmpty ne semble pas être déclenchée sauf si vous avez également appelé setRequired() sur la é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.

Questions connexes