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 :

Plusieurs action sur la meme page avec symfony


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2017
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2017
    Messages : 90
    Par défaut Plusieurs action sur la meme page avec symfony
    Bonjour a tous,

    Je suis sous symfony 4 .

    Je me pose des questions sur l'organisation de mon code pour avoir plusieurs actions sur la même page.

    Bien sur toutes mes actions ont des routes différentes. new/show/edit , cela ouvre a chaque fois une nouvelle page. Mais lorsque l'on doit avoir plusieurs action dans la même page comment doit on faire.

    Par exemple sur la même page je doit creer une cotisation et ensuite je dois pouvoir la modifier.

    Je met tout dans une seules fonction de mon controller? J'appelle les méthodes?

    sans compter que pour modifier dans la meme page que la création c'est galère car comment recupérer l'id? en temps normal on le récupère avec un path ou on lui attribut l'id mais là?

    Je sais c'a fait beaucoup d' interrogations , merci d'avance pour vos reponses.

    Voila c'est en fait ces deux méthodes que je voudrai insérer dans ma page ou j'affiche la fiche adherent. J'ai deux form différents pour la création et la modification de ma cotisation car j'ai des différences .
    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
     
    class AmountController extends AbstractController
    {
    /**
         * Permet de créer une cotisation
         *
         * @Route("/amount/{id}/new" , name="amount_create")
         *
         *
         * @return Response
         */
        public function create(Request $request, ObjectManager $manager, $id)
        {
     
            $repo = $this->getDoctrine()->getRepository(Adherent::class);
            $adherent = $repo->find($id);
     
            $amount = new Amount();
     
     
            $form = $this->createForm(AmountCreateType::class, $amount);
     
            $form->handleRequest($request);
     
     
            if ($form->isSubmitted() && $form->isValid()) {
     
                $amount->setAdherent($adherent);
     
                $manager->persist($amount);
                $manager->flush();
     
                $this->addFlash(
                    'success',
                    "La cotisation a bien été enregistrée !"
                );
     
                return $this->redirectToRoute(
                    "adherent_show",
                    [
                        'id' => $amount->getAdherent()->getId()
                    ]
                );
     
            }
     
            return $this->render('amount/new.html.twig', [
                'form' => $form->createView()
            ]);
        }
     
     
        /**
         * Permet de modifier une cotisation
         *
         * @Route("amount/{id}/modif", name="amount_modif")
         *
         * @param Amount $amount
         *
         * @return Response
         */
        public function modif(Amount $amount, Request $request, ObjectManager $manager)
        {
     
     
            $form = $this->createForm(AmountType::class, $amount);
     
            $form->handleRequest($request);
     
            if ($form->isSubmitted() && $form->isValid()) {
                $manager->persist($amount);
                $manager->flush();
                $this->addFlash(
                    'success',
                    "La cotisation a bien été modifiée !"
                );
                return $this->redirectToRoute(
                    "adherent_show",
                    array(
                        'id' => $amount->getAdherent()->getId()
                    )
                );
            }
     
            return $this->render('amount/amount_modif.html.twig', [
                'amount' => $amount,
                'form' => $form->createView()
            ]);
        }
     
    }
    Voici la methode qui me permet d'afficher mon adherent qui est dans un autre controller.
    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
     
    class AdherentController extends AbstractController
    {
     
    /**
         * Permet d'afficher un adherent
         *
         * @Route("/adherent/{id}/show", name="adherent_show")
         *
         *
         * @param AdherentRepository $repo
         * @param ObjectManager $manager
         * @return Response
         */
        public function show($id,Request $request, ObjectManager $manager)
        {
     
            $repo = $this->getDoctrine()->getRepository(Adherent::class);
            $adherent = $repo->find($id);
            $repo1 = $this->getDoctrine()->getRepository(CategoryAdherent::class);
            $cat = $repo1->findAll();
     
    return $this->render('adherent/show.html.twig', [
                'adherent' => $adherent,
                'cat' => $cat,
     
            ]);
        }
    }
    Comment je fais du coup ?
    C'a fait deux jours que j'y suis dessus et je n'y arrive pas , a part copier le code de mes deux methodes dans la methode de ma fiche adherent mais je ne pense pas que se soit propre et en plus je n'arrive pas a modifier ma cotisation car il ne trouve pas l'id de ma cotisation deja créée.
    Merci de votre aide.

  2. #2
    Membre Expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Par défaut
    Bonjour,

    Je te recommande d'installer le maker bundle de Symfony. Avec la commande ci-dessous, il va créer le squelette complet de ton code. Tu n'auras plu qu'à le modifier pour charger l'adhérent dans la fonction de création, adapté les formulaires, mais au moins tu ne pars pas de rien et tu auras les bases pour respecter les bonnes pratiques de Symfony.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    symfony console make:crud
    Tu verras, il va te générer le CRUD complet et ce sera bien plus simple de partir de là. (Sans compter, qu'il te crée le formulaire et les vues !!!)

    Je viens de le faire avec une classe "Dog" et non pas Amount. Si tu remarques bien, les codes des fonctions edit et new sont légèrement différents au niveau des paramètres. Sinon, le reste est presque identique.

    Dans la méthode pour éditer, le chien arrive via les paramètres, car Symfony embarques des aides (helpers) qui retrouve le chien dans la base de données et te le balance directement dans l'argument. Tu peux faire la même chose avec la classe Amount !

    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
     
        /**
         * @Route("/{id}/edit", name="dog_edit", methods={"GET","POST"})
         */
        public function edit(Request $request, Dog $dog): Response
        {
            $form = $this->createForm(DogType::class, $dog);
            $form->handleRequest($request);
     
            if ($form->isSubmitted() && $form->isValid()) {
                $this->getDoctrine()->getManager()->flush();
     
                return $this->redirectToRoute('dog_index');
            }
     
            return $this->render('dog/edit.html.twig', [
                'dog' => $dog,
                'form' => $form->createView(),
            ]);
        }
    Dans la code de la création, on ne voit pas le Dog dans les paramètres, on crée une nouvelle entité à la première ligne de code.
    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
     
       /**
         * @Route("/new", name="dog_new", methods={"GET","POST"})
         */
        public function new(Request $request): Response
        {
            $dog = new Dog();
            $form = $this->createForm(DogType::class, $dog);
            $form->handleRequest($request);
     
            if ($form->isSubmitted() && $form->isValid()) {
                $entityManager = $this->getDoctrine()->getManager();
                $entityManager->persist($dog);
                $entityManager->flush();
     
                return $this->redirectToRoute('dog_index');
            }
     
            return $this->render('dog/new.html.twig', [
                'dog' => $dog,
                'form' => $form->createView(),
            ]);
        }
    Dans ton cas, dans la méthode create, tu peux choper l'adhérent de la même façon que l'Amount dans la classe édition.


    Voici le code complet du CRUD :
    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
    93
    94
    95
     
    <?php
     
    namespace App\Controller;
     
    use App\Entity\Dog;
    use App\Form\DogType;
    use App\Repository\DogRepository;
    use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\HttpFoundation\Response;
    use Symfony\Component\Routing\Annotation\Route;
     
    /**
     * @Route("/dog")
     */
    class DogController extends AbstractController
    {
        /**
         * @Route("/", name="dog_index", methods={"GET"})
         */
        public function index(DogRepository $dogRepository): Response
        {
            return $this->render('dog/index.html.twig', [
                'dogs' => $dogRepository->findAll(),
            ]);
        }
     
        /**
         * @Route("/new", name="dog_new", methods={"GET","POST"})
         */
        public function new(Request $request): Response
        {
            $dog = new Dog();
            $form = $this->createForm(DogType::class, $dog);
            $form->handleRequest($request);
     
            if ($form->isSubmitted() && $form->isValid()) {
                $entityManager = $this->getDoctrine()->getManager();
                $entityManager->persist($dog);
                $entityManager->flush();
     
                return $this->redirectToRoute('dog_index');
            }
     
            return $this->render('dog/new.html.twig', [
                'dog' => $dog,
                'form' => $form->createView(),
            ]);
        }
     
        /**
         * @Route("/{id}", name="dog_show", methods={"GET"})
         */
        public function show(Dog $dog): Response
        {
            return $this->render('dog/show.html.twig', [
                'dog' => $dog,
            ]);
        }
     
        /**
         * @Route("/{id}/edit", name="dog_edit", methods={"GET","POST"})
         */
        public function edit(Request $request, Dog $dog): Response
        {
            $form = $this->createForm(DogType::class, $dog);
            $form->handleRequest($request);
     
            if ($form->isSubmitted() && $form->isValid()) {
                $this->getDoctrine()->getManager()->flush();
     
                return $this->redirectToRoute('dog_index');
            }
     
            return $this->render('dog/edit.html.twig', [
                'dog' => $dog,
                'form' => $form->createView(),
            ]);
        }
     
        /**
         * @Route("/{id}", name="dog_delete", methods={"DELETE"})
         */
        public function delete(Request $request, Dog $dog): Response
        {
            if ($this->isCsrfTokenValid('delete'.$dog->getId(), $request->request->get('_token'))) {
                $entityManager = $this->getDoctrine()->getManager();
                $entityManager->remove($dog);
                $entityManager->flush();
            }
     
            return $this->redirectToRoute('dog_index');
        }
    }
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  3. #3
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2017
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2017
    Messages : 90
    Par défaut
    Merci, mais lorsque les méthodes sont séparés tout marche nickel. C'est lorsque des 3 j'en fait une pour avoir les actions sur la même page que je n'arrive pas a modifier mon amount car l'id en paramètre correspond a l'id de l'adhérent et pas de l'amount. Du coup il faut que je lui signifie l'id de l'amount a modifier et c'est la que je bloque

  4. #4
    Membre Expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Par défaut
    Je ne sais pas si tu as posté cela du téléphone, mais je n'ai pas bien compris ta phrase.

    Je te préconise deux pistes :
    • lister le dernier amount de l'adhérent dans la méthode show en utilisant l'AmountRepository puis de le transmettre à la vue ;
    • lister tous les amounts de l'adhérent dans la méthode show et les transmettre tous à la vue.
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

Discussions similaires

  1. Inclure plusieurs listes sur une meme page avec layout
    Par MaxAttila dans le forum Développement Sharepoint
    Réponses: 3
    Dernier message: 14/10/2010, 16h31
  2. Plusieurs vidéos sur une meme page
    Par Greg32885 dans le forum Flash
    Réponses: 0
    Dernier message: 29/01/2008, 18h59
  3. Plusieurs Listes sur la meme page Erreur
    Par PseT34 dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 03/01/2008, 17h09
  4. plusieurs action sur un meme bouton
    Par francksilvagni dans le forum Flash
    Réponses: 8
    Dernier message: 04/05/2007, 17h54
  5. [STRUTS] Plusieurs actions dans une meme page
    Par DarkWark dans le forum Struts 1
    Réponses: 22
    Dernier message: 10/01/2006, 16h18

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