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.