Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
|
symfony_4:fonctionnement:les_controleurs_preparation_des_donnees [2018/10/18 14:13] julien.guerin créée |
symfony_4:fonctionnement:les_controleurs_preparation_des_donnees [2019/12/08 07: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' | Sous la symfony 4, l' | ||
| <code Bash> | <code Bash> | ||
| php bin/console make: | php bin/console make: | ||
| </ | </ | ||
| - | + | XXXXXX étant le nom de la classe ou de l' | |
| + | |||
| + | ---- | ||
| + | |||
| + | ===== Les méthodes ===== | ||
| + | |||
| + | Les méthodes sont à ajouté manuellement. | ||
| + | |||
| + | ==== Nommage ==== | ||
| + | Depuis la version 4, l' | ||
| + | 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' | ||
| + | * 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' | ||
| + | |||
| + | 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é, | ||
| + | * Définir un paramètre pour la route de la méthode, | ||
| + | * Définir le paramètre avec l' | ||
| + | * Exemple : | ||
| + | * public function delete ( $id ) { ... } devient | ||
| + | * public function delete ( User $user ) { ... } | ||
| + | |||
| + | Ainsi, au lieu de | ||
| + | <code PHP> | ||
| + | /** | ||
| + | * Delete a User | ||
| + | * | ||
| + | * @Route("/ | ||
| + | * | ||
| + | * @param integer $id | ||
| + | * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response | ||
| + | */ | ||
| + | public function delete(Integer $id) | ||
| + | { | ||
| + | $manager = $this-> | ||
| + | |||
| + | // | ||
| + | $user = $manager-> | ||
| + | |||
| + | //retrait du User | ||
| + | $manager-> | ||
| + | $manager-> | ||
| + | |||
| + | return $this-> | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | On écrira : | ||
| + | <code PHP> | ||
| + | /** | ||
| + | * Delete a User | ||
| + | * | ||
| + | * @Route("/ | ||
| + | * | ||
| + | * @param User $user | ||
| + | * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response | ||
| + | */ | ||
| + | public function delete(User $user) | ||
| + | { | ||
| + | $manager = $this-> | ||
| + | |||
| + | //retrait du User, directement récupéré via l' | ||
| + | $manager-> | ||
| + | $manager-> | ||
| + | |||
| + | return $this-> | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | **Remarque :** Les arguments passés à une méthode Symfony ne sont pas forcement des variables conventionnelles. | ||
| + | |||
| + | **Exemple :** La variable $mailer de type / | ||
| + | |||
| + | ---- | ||
| + | |||
| + | === Exemple d' | ||
| + | <code PHP> | ||
| + | /** | ||
| + | * Edit a SWFile | ||
| + | * | ||
| + | * @Route("/ | ||
| + | * | ||
| + | * @IsGranted(" | ||
| + | * | ||
| + | * @param Request $request | ||
| + | * @param SWFile $SWFile | ||
| + | * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response | ||
| + | */ | ||
| + | public function edit(Request $request, SWFile $SWFile){ ... } | ||
| + | </ | ||
| + | |||
| + | |||
| + | ---- | ||
| + | |||
| + | |||
| + | ==== 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' | ||
| + | * Re-direction vers une route spécifique | ||
| + | |||
| + | ---- | ||
| + | |||
| + | === Affichage d'une vue (TWIG) === | ||
| + | |||
| + | Pour retourner une vue, il suffit d' | ||
| + | |||
| + | == Exemple == | ||
| + | <code PHP> | ||
| + | /** | ||
| + | * Display SWFile list in tab | ||
| + | * | ||
| + | * @Route("/ | ||
| + | * | ||
| + | * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response | ||
| + | */ | ||
| + | public function index(Request $request) | ||
| + | { | ||
| + | $manager = $this-> | ||
| + | |||
| + | $tabSWFile = $manager-> | ||
| + | |||
| + | return $this-> | ||
| + | ' | ||
| + | )); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | === 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-> | ||
| + | ' | ||
| + | ' | ||
| + | )); | ||
| + | |||
| + | $json_array = array( | ||
| + | ' | ||
| + | ' | ||
| + | ); | ||
| + | |||
| + | $response = new JsonResponse(); | ||
| + | return $response-> | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | === 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-> | ||
| + | </ | ||
| + | |||
| + | <code PHP> | ||
| + | /** | ||
| + | * Add a SWFile | ||
| + | * | ||
| + | * @Route("/ | ||
| + | * | ||
| + | * @IsGranted(" | ||
| + | * | ||
| + | * @param Request $request | ||
| + | * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response | ||
| + | */ | ||
| + | public function add( Request $request ) | ||
| + | { | ||
| + | $SWFile = new SWFile(); | ||
| + | $form = $this-> | ||
| + | |||
| + | $form-> | ||
| + | |||
| + | if ($form-> | ||
| + | |||
| + | ... | ||
| + | |||
| + | // | ||
| + | return $this-> | ||
| + | } | ||
| + | |||
| + | ... | ||
| + | |||
| + | } | ||
| + | </ | ||
| + | |||
| + | ---- | ||