Ci-dessous, les différences entre deux révisions de la page.
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 15:16] julien.guerin |
symfony_4:fonctionnement:les_controleurs_preparation_des_donnees [2019/12/08 07:41] (Version actuelle) |
||
---|---|---|---|
Ligne 26: | Ligne 26: | ||
* index (listing, page d' | * index (listing, page d' | ||
* 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 | + | Il faut définir le type des arguments |
+ | 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. | ||
- | **Remarque | + | Pour utiliser cette fonctionnalité, |
- | **Exemple :** La variable | + | |
+ | * Définir le paramètre avec l' | ||
+ | * Exemple : | ||
+ | * public function delete ( $id ) { ... } devient | ||
+ | * public function delete ( User $user ) { ... } | ||
- | ==== Retours ==== | + | Ainsi, au lieu de |
- | + | ||
- | ===== Exemple ===== | + | |
<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 | ||
- | { | ||
/** | /** | ||
- | | + | |
* | * | ||
- | * @param | + | * @Route("/ |
+ | * | ||
+ | * @param | ||
* @return \Symfony\Component\HttpFoundation\RedirectResponse|Response | * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response | ||
- | * | ||
- | * @Route("/ | ||
*/ | */ | ||
- | public function | + | public function |
{ | { | ||
$manager = $this-> | $manager = $this-> | ||
+ | | ||
+ | // | ||
+ | $user = $manager-> | ||
- | | + | |
+ | | ||
+ | $manager->flush(); | ||
- | return $this->render('SWFile/ | + | return $this->redirectToRoute('user'); |
- | ' | + | |
- | )); | + | |
} | } | ||
+ | </ | ||
+ | On écrira : | ||
+ | <code PHP> | ||
/** | /** | ||
- | | + | |
* | * | ||
- | * @Route("/ | + | * @Route("/ |
* | * | ||
- | * @IsGranted(" | + | * @param |
- | * | + | |
- | * @param | + | |
* @return \Symfony\Component\HttpFoundation\RedirectResponse|Response | * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response | ||
*/ | */ | ||
- | public function | + | public function |
{ | { | ||
- | $SWFile = new SWFile(); | + | $manager |
- | $form = $this->createForm(SWFileType:: | + | |
- | $form->handleRequest($request); | + | |
+ | | ||
+ | $manager-> | ||
- | | + | |
- | // $form-> | + | } |
- | // but, the original `$task` variable has also been updated | + | </code> |
- | $SWFile = $form->getData(); | + | |
- | //MAJ des champs non disponibles sur le formulaire | ||
- | $SWFile-> | ||
- | $SWFile-> | ||
- | // | ||
- | $manager = $this-> | ||
- | $manager-> | ||
- | $manager-> | ||
- | return $this-> | + | **Remarque :** Les arguments passés à une méthode Symfony ne sont pas forcement des variables conventionnelles. |
- | } | + | |
- | return | + | **Exemple :** La variable |
- | | + | |
- | )); | + | |
- | } | + | |
- | | + | ---- |
+ | |||
+ | === Exemple d' | ||
+ | <code PHP> | ||
+ | /** | ||
* Edit a SWFile | * Edit a SWFile | ||
* | * | ||
Ligne 126: | 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:: | + | |
- | $form-> | ||
- | if ($form-> | + | ---- |
- | // $form-> | + | |
- | // but, the original `$task` variable has also been updated | + | |
- | $SWFile = $form-> | + | |
- | //MAJ des champs non disponibles sur le formulaire | ||
- | $SWFile-> | ||
- | $SWFile-> | ||
- | // | + | ==== Retours ==== |
- | $manager | + | |
- | $manager-> | + | |
- | $manager-> | + | |
- | return $this-> | + | 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 | ||
- | | + | ---- |
- | 'form' => $form-> | + | |
+ | === 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-> | ||
+ | |||
+ | | ||
+ | 'tabSWFile' => $tabSWFile, | ||
)); | )); | ||
} | } | ||
+ | </ | ||
- | | + | ---- |
- | | + | |
+ | === 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> | ||
+ | /** | ||
+ | | ||
* | * | ||
- | * @Route("/ | + | * @Route("/ |
* | * | ||
- | * @IsGranted(" | + | * @IsGranted(" |
* | * | ||
* @param Request $request | * @param Request $request | ||
- | * @param SWFile $SWFile | ||
* @return \Symfony\Component\HttpFoundation\RedirectResponse|Response | * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response | ||
*/ | */ | ||
- | public function | + | public function |
{ | { | ||
- | $manager | + | $SWFile = new SWFile(); |
+ | $form = $this->createForm(SWFileType:: | ||
- | | + | $form->handleRequest($request); |
- | | + | |
- | $manager-> | + | |
- | return $this-> | + | |
+ | |||
+ | ... | ||
+ | |||
+ | // | ||
+ | | ||
+ | } | ||
+ | |||
+ | ... | ||
+ | | ||
} | } | ||
- | |||
- | } | ||
</ | </ | ||
+ | |||
+ | ---- | ||
+ |