MBO-SD : De site voor software developer in het MBO
Routes in Controllers
Route in je Controller
In de vorige paragraaf heb je gelezen hoe je een route toe kan voegen in je controller. Je zet de routeing informatie steeds boven de functie die aangeroepen wordt vanuit de route.
#[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.
#[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. let op
hiervoor moet je ook de entity opnemen
in de Use
space van jouw Controller.
//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 file (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.
return $this->redirectToRoute('app_book');
Voorbeeld code van hoe je een redirect maakt.