Outils pour utilisateurs

Outils du site


symfony_4:fonctionnement:les_controleurs_preparation_des_donnees

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
symfony_4:fonctionnement:les_controleurs_preparation_des_donnees [2018/10/18 17:09]
julien.guerin
symfony_4:fonctionnement:les_controleurs_preparation_des_donnees [2019/12/08 08:41] (Version actuelle)
Ligne 26: Ligne 26:
   * index (listing, page d'accueil, etc.)   * index (listing, page d'accueil, etc.)
   * add   * add
-  * edit+  * update
   * delete   * delete
  
 Pour les autres, essayé d'en inventé un, en anglais, qui est assez évocateur. Pour les autres, essayé d'en inventé un, en anglais, qui est assez évocateur.
 +
 +----
  
 ==== Arguments ==== ==== Arguments ====
  
 +Il faut définir le type des arguments dans l'entête de la fonction et dans la définition des paramètres.
  
-==== Retours ====+Pour les fonctions récupérant un objet ou id en argument, on utilisera la fonctionnalité de findOneBy() intégré au framework.  
 +Celle-ci permet de gagner du temps lors du développement et de réduire le temps de compréhension des fonctions.
  
-===== Exemple =====+Pour utiliser cette fonctionnalité, il suffit de : 
 +  * Définir un paramètre pour la route de la méthode, 
 +  * Définir le paramètre avec l'entité devant 
 +     Exemple :  
 +         * public function delete ( $id ) { ... } devient 
 +         * public function delete ( User $user ) { ... } 
 + 
 +Ainsi, au lieu de 
 <code PHP> <code PHP>
-<?php 
- 
-namespace App\Controller; 
- 
-use App\Entity\SWFile; 
-use App\Form\SWFileType; 
-use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted; 
-use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
-use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
-use Symfony\Component\HttpFoundation\Response; 
-use Symfony\Component\HttpFoundation\Request; 
- 
-class SWFileController extends Controller 
-{ 
     /**     /**
-     Display SWFile list in tab+     Delete a User
      *      *
-     * @param Request $request+     * @Route("/SWFile/delete/{sw}", name="swfile_delete", requirements={"sw"="\d+"}) 
 +     * 
 +     * @param integer $id
      * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response      * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response
-     * 
-     * @Route("/SWFile/", name="swfile") 
      */      */
-    public function index(Request $request)+    public function delete(Integer $id)
     {     {
         $manager = $this->getDoctrine()->getManager();         $manager = $this->getDoctrine()->getManager();
 +        
 +        //Récupération de l'utilisateur via l'id
 +        $user = $manager->getRepository(User::class)->findOneBy( array('id' => $id) );
  
-        $tabSWFile = $manager->getRepository(SWFile::class)->findAll();+        //retrait du User 
 +        $manager->remove($user)
 +        $manager->flush();
  
-        return $this->render('SWFile/listSW.html.twig', array( +        return $this->redirectToRoute('user');
-            'tabSWFile' => $tabSWFile, +
-        ));+
     }     }
 +</code>
  
 +On écrira :
 +<code PHP>
     /**     /**
-     Add SWFile+     Delete User
      *      *
-     * @Route("/ServiceWorker/add", name="swfile_add")+     * @Route("/SWFile/delete/{sw}", name="swfile_delete", requirements={"sw"="\d+"})
      *      *
-     * @IsGranted("ROLE_ADMIN", statusCode=404, message="Accès refusé !") +     * @param User $user
-     * +
-     * @param Request $request+
      * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response      * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response
      */      */
-    public function addRequest $request )+    public function delete(User $user)
     {     {
-        $SWFile = new SWFile(); +        $manager = $this->getDoctrine()->getManager();
-        $form = $this->createForm(SWFileType::class, $SWFile);+
  
-        $form->handleRequest($request);+        //retrait du User, directement récupéré via l'appel automatique de findOneBy() par le framework 
 +        $manager->remove($user); 
 +        $manager->flush();
  
-        if ($form->isSubmitted() && $form->isValid()) { +        return $this->redirectToRoute('user'); 
-            // $form->getData() holds the submitted values +    } 
-            // but, the original `$task` variable has also been updated +</code>
-            $SWFile = $form->getData();+
  
-            //MAJ des champs non disponibles sur le formulaire 
-            $SWFile->setCreationDate(new \DateTime("now") ); 
-            $SWFile->setEditDate(new \DateTime("now") ); 
  
-            //Application des modifs en BDD 
-            $manager = $this->getDoctrine()->getManager(); 
-            $manager->persist($SWFile); 
-            $manager->flush(); 
  
-            return $this->redirectToRoute('swfile_add'); +**Remarque :** Les arguments passés à une méthode Symfony ne sont pas forcement des variables conventionnelles.
-        }+
  
-        return $this->render('SWFile/newSW.html.twig', array( +**Exemple :** La variable $mailer de type /SwiftMailer ou $request de type Request permettent d'accéder au contenu de la requête ou de définir le service de mailnécessaire à l'envoi de mail.
-            'form' => $form->createView(), +
-        )); +
-    }+
  
-    /**+---- 
 + 
 +=== Exemple d'arguments sur une méthode === 
 +<code PHP> 
 +/**
      * Edit a SWFile      * Edit a SWFile
      *      *
Ligne 121: Ligne 115:
      * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response      * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response
      */      */
-    public function edit(Request $request, SWFile $SWFile) +    public function edit(Request $request, SWFile $SWFile){ ... } 
-    +</code>
-        $form = $this->createForm(SWFileType::class, $SWFile);+
  
-        $form->handleRequest($request); 
  
-        if ($form->isSubmitted() && $form->isValid()) { +----
-            // $form->getData() holds the submitted values +
-            // but, the original `$task` variable has also been updated +
-            $SWFile = $form->getData();+
  
-            //MAJ des champs non disponibles sur le formulaire 
-            $SWFile->setCreationDate(new \DateTime("now") ); 
-            $SWFile->setEditDate(new \DateTime("now") ); 
  
-            //Application des modifs en BDD +==== Retours ====
-            $manager $this->getDoctrine()->getManager(); +
-            $manager->persist($SWFile); +
-            $manager->flush();+
  
-            return $this->redirectToRoute('swfile'); +Il existe plusieurs type de réponses de la part d'un contrôleur : 
-        }+  * Affichage d'une vue 
 +  * Réponse en JSON (pour l'ajax, par exemple
 +  * Re-direction vers une route spécifique
  
-        return $this->render('SWFile/newSW.html.twig', array( +---- 
-            'form' => $form->createView(),+ 
 +=== Affichage d'une vue (TWIG) === 
 + 
 +Pour retourner une vue, il suffit d'appeler la méthode $this->render() 
 + 
 +== Exemple == 
 +<code PHP> 
 +    /** 
 +     * Display SWFile list in tab 
 +     * 
 +     * @Route("/SWFile/", name="swfile"
 +     * 
 +     * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response 
 +     */ 
 +    public function index(Request $request) 
 +    { 
 +        $manager = $this->getDoctrine()->getManager(); 
 + 
 +        $tabSWFile = $manager->getRepository(SWFile::class)->findAll(); 
 + 
 +        return $this->render('SWFile/listSW.html.twig', array( 
 +            'tabSWFile' => $tabSWFile,
         ));         ));
     }     }
 +</code>
  
-    /** +---- 
-     Delete a SWFile (not the file, just the database slot+ 
 +=== Envoi en AJAX === 
 + 
 +Pour retourner un JSON, on créer un tableau et on retourne un objet JsonResponse. 
 + 
 +<code PHP> 
 +use Symfony\Component\HttpFoundation\JsonResponse; 
 +use Symfony\Component\HttpFoundation\Response; 
 + 
 +  ... 
 +   
 +  $modalBarge = $this->renderView('ajax:modalXXX.html.twig', array( 
 +            'tabBargesToday' => $tabBargesToday, 
 +            'tabBarges' => $tabBarges 
 +        )); 
 +         
 +  $json_array = array( 
 +            'error' => $error, 
 +            'modal' => $modalBarge 
 +        ); 
 + 
 +  $response = new JsonResponse(); 
 +  return $response->setData($json_array); 
 +</code> 
 + 
 +---- 
 + 
 +=== Redirection vers une route === 
 + 
 +Pour rediriger vers une méthode précise, on redirige vers la route associée à celle-ci via la méthode : 
 +<code PHP> 
 +$this->redirectToRoute('swfile'); 
 +</code> 
 + 
 +<code PHP> 
 + /** 
 +     Add a SWFile
      *      *
-     * @Route("/SWFile/delete/{sw}", name="swfile_delete", requirements={"sw"="\d+"})+     * @Route("/ServiceWorker/add", name="swfile_add")
      *      *
-     * @IsGranted("ROLE_ADMIN", statusCode=404, message="Accès refusé !")+     * @IsGranted("ROLE_ADMIN", statusCode=404, message="Accès réservé aux administrateurs !")
      *      *
      * @param Request $request      * @param Request $request
-     * @param SWFile $SWFile 
      * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response      * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response
      */      */
-    public function delete(Request $request, SWFile $SWFile)+    public function add( Request $request )
     {     {
-        $manager = $this->getDoctrine()->getManager();+        $SWFile = new SWFile(); 
 +        $form = $this->createForm(SWFileType::class, $SWFile);
  
-        //retrait du SWFile +        $form->handleRequest($request);
-        $manager->remove($SWFile); +
-        $manager->flush();+
  
-        return $this->redirectToRoute('swfile');+        if ($form->isSubmitted() && $form->isValid()) { 
 +             
 +            ... 
 +             
 +            //redirection vers la liste des swfiles après l'ajout 
 +            return $this->redirectToRoute('swfile'); 
 +        } 
 +         
 +        ... 
 +        
     }     }
- 
-} 
 </code> </code>
 +
 +----
 +
symfony_4/fonctionnement/les_controleurs_preparation_des_donnees.1539875388.txt.gz · Dernière modification: 2019/12/08 08:43 (modification externe)