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 boek informatie. Dan wil je bijvoorbeeld in het geval van boeken het id van het boek 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: {id} - deze variabele id komt met dezelfde naam ook weer terug in de functie onder de route.

php
#[Route('/book/show/{id}', name: 'app_book_show')]
public function show(int $id): Response
{
    //Do something with $id
    return $this->render('book/index.html.twig', [
        'controller_name' => 'BookController',
        'bookId' => $id,
    ]);
}

De parameter casten naar een Entity

In het voorgaande voorbeeld is de variabele het $id van een boek. Het is ook mogelijk de entity direct door te geven. Dit zou je kunnen doen door je variabele {book} te noemen en dit $book variabele is dan gelinkt aan het id van de entity Book in het systeem. Het is hierbij belangrijk dat de naam van de entity ook direct in de functie wordt meegegeven.

Let op
Hiervoor moet je ook de entity opnemen in de use-space van jouw Controller.
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.

php
return $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');
}