Routes in je controller
In de vorige paragraaf heb je gelezen hoe je een route toe kan voegen in je controller. Je zet de routing informatie steeds boven de functie die aangeroepen wordt vanuit de route.
php#[Route('/book', name: 'app_book')] public function index(): Response { return $this->render('book/index.html.twig', [ 'controller_name' => 'BookController', ]); }
Route met parameters
Er zijn ook gevallen waarbij je informatie mee wilt sturen met een route, bijvoorbeeld bij het tonen van product informatie. Dan wil je het ID van het product uit de database meegeven, deze parameter kan verschillen want elk product heeft een eigen id. Dit kan je doen door de parameter als variabele op te geven. Deze voeg je dan toe tussen accolades: {product} — deze variabele product komt met dezelfde naam ook weer terug in de functie onder de route.
php#[Route('/book/show/{book}', name: 'app_book_show')] public function show($book): Response { //Do something with $book return $this->render('book/index.html.twig', [ 'controller_name' => 'BookController', 'bookId' => $book, ]); }
De parameter casten naar een Entity
In ons voorbeeld is de variabele {book} en $book gelinkt aan het ID van de entity Book in ons systeem. Je kan in Symfony bij de functie ook meteen de juiste entity ophalen door de naam van de Entity in de functie mee te nemen.
php//In de Use space staat use App\Entity\Book; //Functie in de Controller class #[Route('/book/show/{book}', name: 'app_book_show')] public function show(Book $book): Response { //$book is now filled with the Entity Book return $this->render('book/index.html.twig', [ 'controller_name' => 'BookController', 'bookId' => $book, ]); }
Redirect naar een route
Tot nu toe hebben we nog niet veel gedaan met de naam van een route. De naam vind je in de Annotation en staat na de route zelf.
#[Route('/book', name: 'app_book')]
In bovenstaande Annotation is de route /book en de naam van de route is app_book. Deze naam heb je nodig als je een route wilt gebruiken in een Controller of een Twig-bestand (in je View). Je kan namelijk vanuit een route een redirect maken. Bijvoorbeeld als je een boek wilt wissen heb je een delete route. Als het boek gewist is wil je vanuit de delete route de gebruiker terug sturen naar het overzicht van alle boeken, dus naar de app_book route.
phpreturn $this->redirectToRoute('app_book');
Voorbeeld code van hoe je een redirect maakt:
php#[Route('/book/delete/{book}', name: 'app_book_delete')] public function delete(Book $book): Response { // Verwijder het boek... return $this->redirectToRoute('app_book'); }
Meer in Routeren