Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 08-01-2010 09:40:12

m1b
Membre
Date d'inscription: 04-05-2009
Messages: 44

[Résolu] Gestion des erreurs du formulaires depuis le controller

Hello à tous wink

Oui c'est un peu intensif ces temps tongue mais vous allez me permettre de décoller.

J'ai utilisé des formulaires avec les validateurs ça marche très bien.
Maintenant avant d'effectuer l'enregistrement dans ma base j'effectue une vérification pour par exemple contrôler si l'email existe déjà.

Si c'est le cas je veux que le controller puisse afficher une erreur dans le formulaire.

Si je fait ça par exemple (je sais pas si c'est juste de faire comme ça car je dois déjà faire un echo devant). Et bien l'erreur s'affiche mais je peux pas choisir ou il vient, actuellement il s'affiche directement au fond du formulaire. Personnellement j'aurais voulu qu'il s'affiche vers l'élément $email de mon formulaire.

Code:

echo $form->email->addError('déjà enregistré');

Et si je tente comme ça aucun message n'est affiché.

Code:

echo $form->email->setErrorMessages(array('déjà enregistré'));

Merci pour votre aide smile

Dernière modification par m1b (08-01-2010 11:07:41)

Hors ligne

 

#2 08-01-2010 09:55:38

tylerdurd
Membre
Date d'inscription: 22-07-2009
Messages: 75

Re: [Résolu] Gestion des erreurs du formulaires depuis le controller

Re smile

redéfini isValid dans ton formulaire et utilise Zend_Validate_Db_NoRecordExists pour l'unicité de ton email.

Code:

public function isValid($data)
{
}

Pour les autres, toujours dans la même méthode

Code:

$this->getElement('identifiant_de_ton_champ')->addError('ton_message');

Hors ligne

 

#3 08-01-2010 11:06:55

m1b
Membre
Date d'inscription: 04-05-2009
Messages: 44

Re: [Résolu] Gestion des erreurs du formulaires depuis le controller

Reeee,

Super j'ai ajouté ça à mon formulaire et ça fonctionne.
Par contre on dirait qu'on est obligé d'ajouter un validator si on ne met que le "addError" le message ne s'affichera pas.

Et c'est très pratique le "Zend_Validate_Db_NoRecordExists", avant j'avais fait le processus avec un getRow. D'ailleur je me demandais si sur le fond au niveau des ressources ça valait la peine de faire bien attention entre : getRow / Find / ou encore faire la requête avec / $db->select /.

Code:

    public function isValid($formData){
        // Vérifie si un candidat avec cet email existe déjà 
        $translate = Zend_Registry::get('Zend_Translate');
        $this->getElement('email')->addValidator(new Zend_Validate_Db_NoRecordExists('candidats', 'email', array('field' => 'id', 'value' => $formData['email'])));
        $this->getElement('email')->addError($translate->_('msg_adresse_email_deja_enregistre'));
         return parent::isValid($formData);
    }

Dernière modification par m1b (08-01-2010 11:07:21)

Hors ligne

 

#4 08-01-2010 11:33:37

tylerdurd
Membre
Date d'inscription: 22-07-2009
Messages: 75

Re: [Résolu] Gestion des erreurs du formulaires depuis le controller

Par contre on dirait qu'on est obligé d'ajouter un validator si on ne met que le "addError" le message ne s'affichera pas.

Je ne suis pas sur que ton code soit bon là. Ton message s'affiche en fait tout le temps, essaye de tester en faisant une erreur sur un autre champ.
Si je ne me trompe pas, tu dois juste avoir à traduire ton message dans ton système de traduction, essaye d'enlever le addError, tu devrais avoir le message en anglais.

D'ailleur je me demandais si sur le fond au niveau des ressources ça valait la peine de faire bien attention entre : getRow / Find / ou encore faire la requête avec / $db->select /

Si j'ai compris ta question, ce dont je ne suis pas sur, sur le fond, ça permet d'optimiser.

Hors ligne

 

#5 08-01-2010 18:04:35

m1b
Membre
Date d'inscription: 04-05-2009
Messages: 44

Re: [Résolu] Gestion des erreurs du formulaires depuis le controller

En fait je vois que si on fait juste comme ça il est capable de traduire automatiquement le message.

Code:

$this->getElement('email')->addError('msg_adresse_email_deja_enregistre');

Par contre si j'ai deux messages d'erreurs attribués au champ, mon ->addError les remplace tous bilan, j'ai 2 fois le même message d'erreur sur le même champ. (on dirait que certains l'on déjà rencontré voir ci-dessous)
http://www.z-f.fr/forum/viewtopic.php?id=1924

Oui pour le requêtes c'est vrai que c'est plus rapide de faire un getRow (c'est vite écrit) mais c'est moins optimisé, il faut limiter l'accès aux donnés à uniquement ce qu'on a besoin c'est ce que je vais faire smile

Dernière modification par m1b (08-01-2010 18:06:20)

Hors ligne

 

#6 08-01-2010 18:32:29

tylerdurd
Membre
Date d'inscription: 22-07-2009
Messages: 75

Re: [Résolu] Gestion des erreurs du formulaires depuis le controller

Je ne comprends pas ton problème, enfin je comprends ce qui s'affiche et ne devrait pas, mais je comprends pas pourquoi tu as 2 fois le même message ... et pourquoi il remplace tout ....

Normalement, avec le validateur Zend_Validate_Db_NoRecordExists, tu as déjà un message d'erreur intégré, donc, je ne comprends pas pourquoi tu en rajoutes 1 ...

Hors ligne

 

#7 09-01-2010 17:26:05

m1b
Membre
Date d'inscription: 04-05-2009
Messages: 44

Re: [Résolu] Gestion des erreurs du formulaires depuis le controller

Oui tu as tout à fait raison le message est déjà intégré avec le validateur il suffit donc de faire ceci :

Code:

        $this->getElement('email')->addValidator($emailExist = new Zend_Validate_Db_NoRecordExists('candidats', 'email', array('field' => 'id', 'value' => $formData['email'])));
        $emailExist->setMessage('msg_adresse_email_deja_enregistre');

Bon par contre je verrai quand j'en aurais besoin mais si on fait

Code:

$this->getElement('prenom')->addError('encore un message');

et que dans notre formulaire on a déjà plusieurs validateurs sur ce champ, le addError vient s'afficher deux fois à la place de $valid1 et $valid2, mais je verrais encore ça par la suite.

Code:

$prenom->addValidator($valid1)
$prenom->addValidator($valid2)

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages