Annotation

Routeren in Symfony

Symfony biedt twee manieren voor routering: via configuratiebestanden (config/routes.yaml of config/routes.php) of via annotation.

Voordelen configuratiebestand: alle routes staan samen overzichtelijk op één plek, hoewel je dan de Controller apart moet opzoeken.

Voordelen annotation: routes staan direct boven de functies in de Controller, logisch gegroepeerd en snel te vinden, maar je hebt geen centraal routesbestand.

MBO-SD gebruikt Annotation
Op MBO-SD werken we met de annotation-benadering. Routes bevinden zich in Controllers, direct boven de relevante functies.

Use-statement

Om annotations te kunnen gebruiken in je Controllers voeg je de volgende use-statement toe:

php
use Symfony\Component\Routing\Attribute\Route;

In projecten die aangemaakt zijn met de --webapp parameter is dit al standaard aanwezig.

Routes vooraf plannen

Maak vóór het programmeren een tabel met alle benodigde routes en controllers. Dit geeft overzicht en zorgt voor een logische opbouw van je applicatie.

Hoe annotation werkt

Boven een functie in je Controller plaats je de route met de bijbehorende informatie:

php
#[Route('/book', name: 'app_book')]
public function index(): Response
{
    return $this->render('book/index.html.twig', [
        'controller_name' => 'BookController',
    ]);
}

De route heeft het pad /book en de naam app_book. Die naam gebruik je later als je elders in je applicatie naar deze specifieke route wilt verwijzen.

Alle routes weergeven

Met het volgende terminal-commando bekijk je alle routes die bekend zijn in je applicatie:

bash
symfony console debug:router

Dit geeft een overzicht met routenamen, HTTP-methoden, schemes, hosts en paden.

Details van een specifieke route

Wil je meer informatie over één bepaalde route, voeg dan de naam van de route toe aan het commando:

bash
symfony console debug:router app_book

Dit toont gedetailleerde eigenschappen van de route, zoals de locatie van de bijbehorende Controller, het pad-regex, de toegestane HTTP-methoden en de routing-vereisten.