Ceci est une ancienne révision du document !
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.
Sous la symfony 4, l'ajout d'un contrôleur se fait par la commande suivante :
php bin/console make:controller XXXXXXController
XXXXXX étant le nom de la classe ou de l'action souhaité
Les méthodes sont à ajouté manuellement.
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 :
Pour les autres, essayé d'en inventé un, en anglais, qui est assez évocateur.
<?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 * * @param Request $request * @return \Symfony\Component\HttpFoundation\RedirectResponse|Response * * @Route("/SWFile/", name="swfile") */ 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, )); } /** * Add a SWFile * * @Route("/ServiceWorker/add", name="swfile_add") * * @IsGranted("ROLE_ADMIN", statusCode=404, message="Accès refusé !") * * @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()) { // $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 $manager = $this->getDoctrine()->getManager(); $manager->persist($SWFile); $manager->flush(); return $this->redirectToRoute('swfile_add'); } return $this->render('SWFile/newSW.html.twig', array( 'form' => $form->createView(), )); } /** * 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) { $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 $manager = $this->getDoctrine()->getManager(); $manager->persist($SWFile); $manager->flush(); return $this->redirectToRoute('swfile'); } return $this->render('SWFile/newSW.html.twig', array( 'form' => $form->createView(), )); } /** * Delete a SWFile (not the file, just the database slot * * @Route("/SWFile/delete/{sw}", name="swfile_delete", 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 delete(Request $request, SWFile $SWFile) { $manager = $this->getDoctrine()->getManager(); //retrait du SWFile $manager->remove($SWFile); $manager->flush(); return $this->redirectToRoute('swfile'); } }