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

Prochaine révision
Révision précédente
symfony_4:fonctionnement:les_controleurs_preparation_des_donnees [2018/10/18 16:13]
julien.guerin créée
symfony_4:fonctionnement:les_controleurs_preparation_des_donnees [2019/12/08 08:41] (Version actuelle)
Ligne 1: Ligne 1:
 ====== Les contrôleurs ====== ====== Les contrôleurs ======
  
-==== Définition ====+===== Définition =====
 Un contrôleur permet de réaliser diverses opérations et récupérer et mettre en forme les données avant de les communiquer à la vue. Un contrôleur permet de réaliser diverses opérations et récupérer et mettre en forme les données avant de les communiquer à la vue.
  
 ---- ----
  
-==== Création ====+===== Création =====
 Sous la symfony 4, l'ajout d'un contrôleur se fait par la commande suivante : Sous la symfony 4, l'ajout d'un contrôleur se fait par la commande suivante :
 <code Bash> <code Bash>
 php bin/console make:controller XXXXXXController  php bin/console make:controller XXXXXXController 
 </code> </code>
- +XXXXXX étant le nom de la classe ou de l'action souhaité 
 + 
 +---- 
 + 
 +===== Les méthodes ===== 
 + 
 +Les méthodes sont à ajouté manuellement.  
 + 
 +==== Nommage ==== 
 +Depuis la version 4, l'ajout du nom Action au nom de la méthode n'est plus nécessaire. 
 +Le nom doit cependant rester évocateur et précis. 
 + 
 +Pour les méthodes CRUD (create, read, update, delete), on utilisera les noms de méthodes suivant :  
 +  * index (listing, page d'accueil, etc.) 
 +  * add 
 +  * update 
 +  * delete 
 + 
 +Pour les autres, essayé d'en inventé un, en anglais, qui est assez évocateur. 
 + 
 +---- 
 + 
 +==== Arguments ==== 
 + 
 +Il faut définir le type des arguments dans l'entête de la fonction et dans la définition des paramètres. 
 + 
 +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. 
 + 
 +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> 
 +    /** 
 +     * Delete a User 
 +     * 
 +     * @Route("/SWFile/delete/{sw}", name="swfile_delete", requirements={"sw"="\d+"}) 
 +     * 
 +     * @param integer $id 
 +     * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response 
 +     */ 
 +    public function delete(Integer $id) 
 +    { 
 +        $manager = $this->getDoctrine()->getManager(); 
 +         
 +        //Récupération de l'utilisateur via l'id 
 +        $user = $manager->getRepository(User::class)->findOneBy( array('id' => $id) ); 
 + 
 +        //retrait du User 
 +        $manager->remove($user); 
 +        $manager->flush(); 
 + 
 +        return $this->redirectToRoute('user'); 
 +    } 
 +</code> 
 + 
 +On écrira : 
 +<code PHP> 
 +    /** 
 +     * Delete a User 
 +     * 
 +     * @Route("/SWFile/delete/{sw}", name="swfile_delete", requirements={"sw"="\d+"}) 
 +     * 
 +     * @param User $user 
 +     * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response 
 +     */ 
 +    public function delete(User $user) 
 +    { 
 +        $manager = $this->getDoctrine()->getManager(); 
 + 
 +        //retrait du User, directement récupéré via l'appel automatique de findOneBy() par le framework 
 +        $manager->remove($user); 
 +        $manager->flush(); 
 + 
 +        return $this->redirectToRoute('user'); 
 +    } 
 +</code> 
 + 
 + 
 + 
 +**Remarque :** Les arguments passés à une méthode Symfony ne sont pas forcement des variables conventionnelles. 
 + 
 +**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 mail, nécessaire à l'envoi de mail. 
 + 
 +---- 
 + 
 +=== Exemple d'arguments sur une méthode === 
 +<code PHP> 
 +/** 
 +     * Edit a SWFile 
 +     * 
 +     * @Route("/SWFile/edit/{sw}", name="swfile_edit", requirements={"sw"="\d+"}) 
 +     * 
 +     * @IsGranted("ROLE_ADMIN", statusCode=404, message="Accès refusé !") 
 +     * 
 +     * @param Request $request 
 +     * @param SWFile $SWFile 
 +     * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response 
 +     */ 
 +    public function edit(Request $request, SWFile $SWFile){ ... } 
 +</code> 
 + 
 + 
 +---- 
 + 
 + 
 +==== Retours ==== 
 + 
 +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 
 + 
 +---- 
 + 
 +=== 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> 
 + 
 +---- 
 + 
 +=== 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("/ServiceWorker/add", name="swfile_add"
 +     * 
 +     * @IsGranted("ROLE_ADMIN", statusCode=404, message="Accès réservé aux administrateurs !") 
 +     * 
 +     * @param Request $request 
 +     * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response 
 +     */ 
 +    public function add( Request $request ) 
 +    { 
 +        $SWFile = new SWFile(); 
 +        $form = $this->createForm(SWFileType::class, $SWFile); 
 + 
 +        $form->handleRequest($request); 
 + 
 +        if ($form->isSubmitted() && $form->isValid()) { 
 +             
 +            ... 
 +             
 +            //redirection vers la liste des swfiles après l'ajout 
 +            return $this->redirectToRoute('swfile'); 
 +        } 
 +         
 +        ... 
 +         
 +    } 
 +</code> 
 + 
 +---- 
symfony_4/fonctionnement/les_controleurs_preparation_des_donnees.1539871983.txt.gz · Dernière modification: 2019/12/08 08:43 (modification externe)