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

Symfony PHP Discussion :

Peut-on avoir deux formulaires dans une seule page avec Symfony ?


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juillet 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Juillet 2011
    Messages : 34
    Points : 22
    Points
    22
    Par défaut Peut-on avoir deux formulaires dans une seule page avec Symfony ?
    Bonjour à tous,

    Avec Symfony, je souhaite avoir deux formulaires dans une seule page, un GET et un POST.
    L'idée est simple :
    - Le formulaire en GET permet d'afficher certaines données dans la page ;
    - Le formulaire en POST permet de traiter les données dans la page.

    Voici une image pour simplifier :

    Nom : formulaire.png
Affichages : 384
Taille : 100,2 Ko

    Le formulaire en rouge (1) permet de sélectionner, dans une liste déroulante, les données qui seront affichées dans la page. Et ensuite, le formulaire vert (2), permet de réaliser des actions sur ces données.

    Le soucis est simple : pour afficher les données dans la page, je dois connaître quelle est le compte sélectionné dans le formulaire rouge (1), je fais donc soucis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // $recherche est le formulaire rouge (1) qui comporte juste une entité (la liste des comptes que vous voyez avec les paiement en attente)
            if ($recherche->handleRequest($request)->isValid()) {
                $compte = $recherche->getData()['compte'];
            } else {
                $compte = $recherche->get('compte')->getConfig()->getOptions()['choices'][0];
            }
    Donc ce code fonctionne quand le formulaire 1 n'est pas encore validé et quand je valide le formulaire 1. Cependant, quand je valide le formulaire 2, je perd totalement la validité du formulaire 1 alors que ces données sont encore dans le GET.

    Quelqu'un saurait comment faire ?
    Je me doute que je peux faire une troisième condition pour allé le chercher dans " $request->get() " mais ça fait donc trois conditions pour la même chose, et surtout je ne peux par conséquent pas récupérer l'entité entière.

    Merci d'avance

  2. #2
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    à chaque validation reussi du formulaire 1 tu mets les données du formulaire 1 en session(serialize) ensuite tu t'en sers pour mettre à jour(dans le controlleur) les champs du formulaire 1 après validation du formulaire 2(reussi ou pas)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juillet 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Juillet 2011
    Messages : 34
    Points : 22
    Points
    22
    Par défaut
    Salut et merci de ta réponse,

    Je ne suis vraiment pas fan des SESSION dans ce cas dans la mesure ou si l'utilisateur ouvre un second onglet pour valider d'autres choses en parallèle, ça risque de se marcher dessus. :-S

  4. #4
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    bon après il y a la bonne technique de bourrin de borg.

    tu créais un champs hidden dans le formulaire 2

    dans le controlleur :
    * si validation réussi du formulaire 1.
    - tu fous les données dans le champs hidden(serialize) du formulaire 2
    * si validation non réussi du formulaire 1, tu vide le champs hidden

    * à chaque validation du formulaire 2 (réussi ou pas)
    tu mets à jour la formulaire 1 avec les données du hidden

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    Bonjour,

    // $recherche est le formulaire rouge (1) qui comporte juste une entité (la liste des comptes que vous voyez avec les paiement en attente)
    if ($recherche->handleRequest($request)->isValid()) {
    $compte = $recherche->getData()['compte'];
    } else {
    $compte = $recherche->get('compte')->getConfig()->getOptions()['choices'][0];
    }
    la méthode handleRequest vérifie que la méthode de la requete HTTP et l'attribut method du HTML sont les mêmes. sur une requete POST, ton formulaire GET n'est jamais soumis
    https://github.com/symfony/symfony/b...estHandler.php.

    plutôt que d'utiliser handleRequest tu peux utiliser la méthode submit de Form pour binder les valeurs à ton formulaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $submitedSearchDatas=$request->query->get('logiciel_paiement_recherche_form');
    if($submitedSearchDatas){
       $recherche->submit($submitedSearchDatas);
       if($recherche->isValid()){
          // configurer ta requete de recherche ...
       }
    }
    PS:
    SI ton formulaire en GET est peu complexe, tu peux aussi te passer d'un formulaires Symfony pour effectuer ce traitement

Discussions similaires

  1. [Débutant] 2 formulaire dans une seul page.
    Par chlebta*tsotsi dans le forum ASP.NET MVC
    Réponses: 2
    Dernier message: 04/04/2012, 23h14
  2. [MySQL] plusieurs formulaire dans une seule page
    Par naim2009 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/03/2009, 20h54
  3. [MySQL] Insérer plusieurs formulaires dans une seule page
    Par hakou08 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 19/03/2009, 10h37
  4. integrer deux requetes dans une seule requete access
    Par laurent.w dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 27/12/2006, 15h11
  5. Plusieurs formulaires dans une seule servlet
    Par bf83 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 27/03/2006, 15h21

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