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

 PHP Discussion :

Plusieurs boutons submit sur une seule page (Symfony 5 et Twig)


Sujet :

PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    août 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : août 2017
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Plusieurs boutons submit sur une seule page (Symfony 5 et Twig)
    Bonjour,
    Je ne suis pas un as de symfony, disons que j'arrive à peu près à me débrouiller. Je butte sur un problème depuis plusieurs jours et malgré de nombreuses recherches et tests, je suis vraiment bloqué.
    Mon objectif est de faire une page de réservation de plongées (pour un club). La photo ci-dessous sera plus parlante qu'un long discours.
    Nom : plonge.png
Affichages : 334
Taille : 75,9 Ko

    Mon problème est que je n'arrive pas à obtenir que lorsque je clique l'un des boutons "enregistrer", ce bouton soit reconnu et qu'il me permette d'appliquer le bon traitement dans le controller.
    J'ai bien sûr regardé la méthode isClicked sur la doc de symfony.com mais impossible de trouver comment la mettre en œuvre pour mon cas malgré des heures de recherches et d'essais.

    Ci-dessous, le code de mon controller et de ma vue (pour une seule journée sur les 6)
    Je pense que des personnes plus calées que moi verront certainement d'autres manières de faire plus sophistiquées que la mienne.
    Mais, je viens chercher sur ce forum une aide sur ... la manière de reconnaître un bouton et les syntaxes qu'il faut utiliser dans le controller et la vue.
    Si déjà je pouvais avoir cette solution ce serait parfait.
    Reste que je ne suis pas fermé à de bons conseils pour améliorer mon code, mais mon objectif principal à ce stade est ce problème de syntaxe pour faire reconnaître un bouton.
    Merci d'avance à ceux qui prendront quelques minutes pour me répondre.

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    <?php
     
    namespace App\Controller;
     
    use App\Entity\Dive;
    use Doctrine\ORM\EntityManagerInterface;
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\Routing\Annotation\Route;
    use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
     
    class DiveController extends AbstractController
    {
     
        /**
         * @Route("/dive", name="inscrit")
         */
        public function inscrit(Request $request, EntityManagerInterface $manager)
        {
     
            $dive = new Dive();
     
            $start = new \DateTime("2021/03/14");
     
            $repo = $this->getDoctrine()->getManager()->getRepository(Dive::class);
     
            $mardis     = $repo->findBy(array('jour' => 'mardi'));
            $mercredis  = $repo->findBy(array('jour' => 'mercredi'));
            $jeudis     = $repo->findBy(array('jour' => 'jeudi'));
            $samedis    = $repo->findBy(array('jour' => 'samedi'));
            $samedis2   = $repo->findBy(array('jour' => 'samedi2'));
            $dimanches  = $repo->findBy(array('jour' => 'dimanche'));
     
            $form = $this->createFormBuilder()->getForm()->handleRequest($request);
     
                if($form->isSubmitted() && $form->isValid()) {
     
                    $clicked = $request->request->get('clicked');
                    dd($clicked);
                    $user = $this->getUser();
     
                    $dive -> setNom($this->getUser()->getNom());
                    $dive -> setPrenom($this->getUser()->getPrenom());
                    $dive -> setNiveau($this->getUser()->getNiveau());
                        //dd($request);
                        if($clicked === 'mardi'){
                            $dive -> setDate($start->modify('+2 day'));
                            $dive -> setJour('mardi');
                        }
     
                        if($clicked === 'mercredi'){
                            $dive -> setDate($start->modify('+3 day'));
                            $dive -> setJour('mercredi');
                        }
     
                        if($request->request->get('jeudi')){
                            $dive -> setDate($start->modify('+4 day'));
                            $dive -> setJour('jeudi');
                        }
     
                        if($request->request->get('samedi')){
                            $dive -> setDate($start->modify('+6 day'));
                            $dive -> setJour('samedi');
                        }
     
                        if($request->request->get('samedi2')){
                            $dive -> setDate($start->modify('+6 day'));
                            $dive -> setJour('samedi2');
                        }
     
                        if($request->request->get('dimanche')){
                            $dive -> setDate($start->modify('+7 day'));
                            $dive -> setJour('dimanche');
                        }            
     
                    $manager->persist($dive);
                    $manager->flush();
     
                return $this->redirectToRoute('inscrit');
            }
     
            return $this->render('dive/dive.html.twig', [
                'start'     => $start,
                'form'      => $form->createView(),
                'mardis'    => $mardis,
                'mercredis' => $mercredis,
                'jeudis'    => $jeudis,
                'samedis'   => $samedis,
                'samedis2'  => $samedis2,
                'dimanches' => $dimanches
            ]);
        }
    }
    Et le code (une partie) de ma vue

    Code twig : 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    {% extends 'base.html.twig' %}
     
    {% block title %}Réservation{% endblock %}
     
    {% block body %}
     
        <div class="container">
            <h1>Réservation des plongées</h1>
     
            {% if is_granted('ROLE_USER') %}
            <h5>Bienvenue <strong>{{app.user.prenom }}</strong> dans la réservation des plongées.</h5>
            {% endif %}
            <br>
     
                <div class="row">
     
                    <div class="col s12 m4">
                        <div class="card">
                            <div class="card-Title teal #bbdefb blue lighten-4">
                                <span class="card-title"><strong> Mardi</strong> - {{  start|date_modify("+2 day")|date("d/m/Y") }} </span>
                            </div>
                            <div class="card-content">
                                <table>
                                    <thead>
                                        <tr>
                                            <th>Nom</th>
                                            <th>Prénom</th>
                                            <th>Niveau</th>
                                        </tr>
                                    </thead>
     
                                    <tbody>
                                        {% for mardi in mardis %}
                                            {% if mardi.date > start %}
                                                <tr>
                                                    <td>{{mardi.nom}}</td>
                                                    <td>{{mardi.prenom}}</td>
                                                    <td>{{mardi.niveau}}</td>
                                                </tr>
                                            {% endif %}                 
                                        {% endfor %}
                                    </tbody>                            
                                </table>
                                <br>
                                    {{ form_start(form) }}
                                    <button method="post" type='submit' name='clicked' value="mardi" class='waves-effect waves-light btn-small' style='background: #00cf67' label='mardi'>Inscription</button>                                                              
                                    {{ form_end(form) }}
                            </div>
                        </div>

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    juin 2005
    Messages
    5 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : juin 2005
    Messages : 5 485
    Points : 12 577
    Points
    12 577
    Par défaut
    Bonjour,

    Regardez le code source de votre vue.

    Je pense que quand vous verrez ce que génèrent les 46-48 de votre vue, vous comprendrez

    Code twig : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    {{ form_start(form) }}
                                    <button method="post" type='submit' name='clicked' value="mardi" class='waves-effect waves-light btn-small' style='background: #00cf67' label='mardi'>Inscription</button>                                                              
    {{ form_end(form) }}

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    août 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : août 2017
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Merci pour votre réponse, mais ... elle me plonge dans un abîme de perplexité.
    Votre message m'indique que la clé du problème est dans ce bout de code.
    Mais cela fait 3 jours que je "regarde", que je cherche (notamment à cet endroit), que je teste ... en vain.
    Je vais recommencer et essayer de comprendre.

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    juin 2005
    Messages
    5 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : juin 2005
    Messages : 5 485
    Points : 12 577
    Points
    12 577
    Par défaut
    Ok, faite un ctrl +u de votre page, répérer le code html et postez le ici

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    août 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : août 2017
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Voilà le code

    Code HTML : 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
                <div class="row">
     
                    <div class="col s12 m4">
                        <div class="card">
                            <div class="card-Title teal #bbdefb blue lighten-4">
                                <span class="card-title"><strong> Mardi</strong> - 16/03/2021 </span>
                            </div>
                            <div class="card-content">
                                <table>
                                    <thead>
                                        <tr>
                                            <th>Nom</th>
                                            <th>Prénom</th>
                                            <th>Niveau</th>
                                        </tr>
                                    </thead>
     
                                    <tbody>
                                                                                                                            <tr>
                                                    <td>GERMAIN</td>
                                                    <td>Bernard</td>
                                                    <td>E4</td>
                                                </tr>
     
                                                                        </tbody>                            
                                </table>
                                <br>
                                <form name="form" method="post">
                                <button method="POST" type="submit" name="mardi"  value="mardi"  class="waves-effect waves-light btn-small" style="background: #00cf67">Enregistrer</button>
                                <input type="hidden" id="form__token" name="form[_token]" value="ijys0k9V0YX6AC7AsYha1bgXvfiBUIrd-gC5wUUklzE" /></form>
                            </div>
                        </div>
     
                    </div>

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    août 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : août 2017
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Question complémentaire sur laquelle je sèche complètement :

    1-Pourquoi mon code fonctionne-t-il pour le mardi mais ne s’exécute pas pour le mercredi alors que c'est exactement le même code ?
    Si je fais un dd($request) après avoir cliqué sur "enregistrer" du mardi j'obtiens bien dans les paramètres de la request qu'il s'agit de mardi.
    Si je clique sur "enregistrer" du mercredi ... rien ne se passe.

    Je ne comprends pas du tout pourquoi ni surtout comment remédier à cela.

  7. #7
    Membre actif
    Homme Profil pro
    Dév Java/JavaEE
    Inscrit en
    décembre 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dév Java/JavaEE

    Informations forums :
    Inscription : décembre 2012
    Messages : 53
    Points : 202
    Points
    202
    Par défaut
    Salut,

    Où est ta solution ?

  8. #8
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    juin 2005
    Messages
    5 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : juin 2005
    Messages : 5 485
    Points : 12 577
    Points
    12 577
    Par défaut
    Vous nous montrez que le code du mardi, il n'y a rien concernant le mercredi par exemple ?

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

Discussions similaires

  1. Solution js fiddle !? (Plusieurs vidéos YT sur une seule page)
    Par cyberbelette dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 03/04/2018, 13h29
  2. [GD] Générer plusieurs images en PHP sur une seul page
    Par arnaudperfect dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 06/04/2012, 12h26
  3. Plusieurs boutons submit sur la meme page
    Par KaNDeL dans le forum Langage
    Réponses: 5
    Dernier message: 26/04/2009, 20h01
  4. Regrouper plusieurs graphes sur une seule page
    Par Pur2000 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/12/2008, 12h53
  5. Mettre plusieurs graphiques sur une seule page
    Par 7heart dans le forum ODS et reporting
    Réponses: 3
    Dernier message: 06/05/2008, 23h41

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