IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend_Form PHP Discussion :

Validator sur plusieurs éléments [ZF 1.7]


Sujet :

Zend_Form PHP

  1. #1
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut Validator sur plusieurs éléments
    Bonjour.

    Je souhaiterais avoir un validator qui prend en compte plusieurs éléments pour sa vérification.

    Dans mon formulaire, j'ai un Zend_Form_Element_Select contenant une liste de personnes et deux Zend_Form_Element_Text destinés à recevoir le nom et le prénom d'une nouvelle personne si l'utilisateur ne figure pas dans la liste proposée afin qu'il puisse s'y ajouter.

    Mon formulaire prend en compte bien sûr cette saisie et ajoute l'utilisateur à la table des personnes puis récupère l'identifiant pour l'utiliser dans l'enregistrement des données du formulaire.

    Je voudrais vérifier que l'utilisateur a bien :
    - soit choisi une personne dans la liste ;
    - soit entré une nouvelle personne (son nom ET son prénom).

    De même, si une nouvelle personne est saisie, il faut indiquer son service :
    - soit par choix dans la liste des services ;
    - soit par saisie d'un nouveau service.

    Il me faudrait donc un validator qui vérifie plusieurs éléments ou un validator général du formulaire qui vérifierait tout ça.

    Faisable ?
    Si oui comment ? Un petit tuto quelque part ?

  2. #2
    Membre actif

    Inscrit en
    Juin 2009
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 99
    Points : 228
    Points
    228

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    OK merci je comprends à peu près le système.

    J'ai aujourd'hui :
    - /application/controllers/DysfonctionnementController
    - /application/models/FormulaireDysfonctionnement
    - /application/views/scripts/dysfonctionnement/ajouter.phtml

    Comme il faut créer une classe pour le validator, je la mets où ?
    Dans /application/views/helpers ?

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Je pensais avoir trouvé une bonne solution mais cela ne fonctionne pas.

    Voilà ce que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
            if ($this->_request->isPost()) 
            {
                $formData = $this->_request->getPost();
     
                // V0.5 : Contrôle du choix ou de la saisie d'un émetteur
                if ($form->getValue('sel_emetteur') == '')
                {
                    // Emetteur non choisi dans la liste => on rend obligatoire sa saisie
                    $form->nom_emetteur->setRequired(true);
                    $form->prenom_emetteur->setRequired(true);
                    $this->view->error_message = "Vous devez choisir un émetteur ou donner le nom, le prénom et le service d'un nouvel émetteur inexistant dans la liste.";
     
                    if (null === $form->getValue('sel_service'))
                    {
                        // Service du nouvel émetteur non choisi dans la liste
                        $form->service->setRequired(true);
                    }
                } // Fin if ($form->getValue('sel_emetteur') == '0')
     
                if ($form->isValid($formData)) 
                {
    Mais il semble que pour que $form->getValue('sel_emetteur') récupère la valeur entrée par l'utilisateur, il y ait d'abord besoin de la fonction $form->isValid($formData).

    En effet, si je capture $form->getValue('sel_emetteur') avant et après le dernier if, comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            if ($this->_request->isPost()) 
            {
                $formData = $this->_request->getPost();
    echo '<br />sel_emetteur : '.$form->getValue('sel_emetteur');
    // ...
                } // Fin if ($form->getValue('sel_emetteur') == '0')
     
                if ($form->isValid($formData)) 
                {
    echo '<br />sel_emetteur : '.$form->getValue('sel_emetteur');
    J'obtiens ceci à l'écran :
    sel_emetteur :
    sel_emetteur : 3
    Très embètant !

    Comment puis-je contourner ce problème ?

    EDIT :
    J'ai trouvé, en demandant la valeur de $formData.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            if ($this->_request->isPost()) 
            {
                $formData = $this->_request->getPost();
     
                // V0.5 : Contrôle du choix ou de la saisie d'un émetteur
                if ($formData['sel_emetteur'] == '0')
                {

  5. #5
    Membre actif

    Inscrit en
    Juin 2009
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 99
    Points : 228
    Points
    228
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    OK merci je comprends à peu près le système.

    J'ai aujourd'hui :
    - /application/controllers/DysfonctionnementController
    - /application/models/FormulaireDysfonctionnement
    - /application/views/scripts/dysfonctionnement/ajouter.phtml

    Comme il faut créer une classe pour le validator, je la mets où ?
    Dans /application/views/helpers ?
    Ça dépend comment tu comptes garder ton code propre, moi personnellement je les mets dans le même répertoire que les librairies ZF.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 08/08/2011, 22h30
  2. Faire une boucle sur plusieurs éléments
    Par retwas dans le forum VB.NET
    Réponses: 4
    Dernier message: 06/04/2011, 17h30
  3. Réponses: 12
    Dernier message: 26/02/2011, 00h16
  4. [SVG] zoom sur plusieurs éléments
    Par baris69330 dans le forum XML/XSL et SOAP
    Réponses: 11
    Dernier message: 18/06/2010, 20h16
  5. [Prototype] Placer un observateur sur plusieurs éléments
    Par Shirraz dans le forum Bibliothèques & Frameworks
    Réponses: 14
    Dernier message: 06/04/2009, 22h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo