MBO-SD : De site voor software developer in het MBO
Annotations in Symfony
Routeren in Symfony
Routeren in Symfony kan op twee manieren. Het kan via een configuratie bestand
config/routes.yaml
of config/routes.php
of het kan via
annotation
.
Voor beide oplossingen is wat te zeggen. Het voordeel van een routes-bestand is dat je alle routes bij elkaar
hebt en je snel kan zien waar een route heen gaat, maar je moet dan altijd de betreffende Controller opzoeken.
Bij de Annotation
oplossing staan de routes boven de functies in je Controller. Dit is binnen een
controller overzichtelijk en als je logisch programmeert ook snel en goed te vinden. Het nadeel is dat je niet
een bestand hebt als oplossing voor je routes.
Op MBO-SD gebruiken we de Annotation oplossing
Binnen MBO-SD gebruiken we de Annotation
oplossing. Je zult dus in de Controllers de routes
terug vinden. Boven elke functie die bij een route hoort zal je een stuk code zien staan.
In de Use
sectie van je Controller moet je de Route optie aangeven om te gebruiken. Dit
doe je door de volgende Use-statement op te nemen:
use Symfony\Component\Routing\Attribute\Route;
Als jouw Symfony project in de basis gemaakt is met de --webapp
parameter zal dit standaard het
geval zijn.
Daarna kan je jouw route boven een functie zetten in jouw Controller(s)
Maak vooraf een overzicht van je routes en controllers
Het is belangrijk om goed over jouw routes en oplossingen na te denken en voor je gaat programmeren te starten met alle routes en Controllers in kaart te brengen en in een tabel te zetten. Zo weet je welke routes je nodig hebt en kan je alles logisch in elkaar knutsellen.
Hoe werkt Annotation
Bij Annotation zet je boven een functie de route met eventueel extra informatie neer.
#[Route('/book', name: 'app_book')]
public function index(): Response
{
return $this->render('book/index.html.twig', [
'controller_name' => 'BookController',
]);
}
/book
de naam van de route is app_book
. Deze naam kan je later gebruiken om naar de juiste route te verwijzen.
Meer informatie over de werking van de routes en hoe je ze in jouw Controller gebruikt vind je in de volgende paragraaf.
Overzicht van alle routes
In Symfony kan je met een termninal-commando alle routes tonen die er zijn en wat de naam van de route is
symfony console debug:router
# symfony console debug:router
---------------- ------- ------- ----- --------------------------------------------
Name Method Scheme Host Path
---------------- ------- ------- ----- --------------------------------------------
homepage ANY ANY ANY /
contact GET ANY ANY /contact
contact_process POST ANY ANY /contact
article_show ANY ANY ANY /articles/{_locale}/{year}/{title}.{_format}
blog ANY ANY ANY /blog/{page}
blog_show ANY ANY ANY /blog/{slug}
---------------- ------- ------- ----- --------------------------------------------
Meer informatie over een route
Je kan ook met de naam van een route met dit commando meer informatie ophalen, bijvoorbeeld in welke Controller de route gemaakt is. Dit doe je door de naam van de route toe te voegen aan het commando.
# symfony console debug:router app_book
+--------------+---------------------------------------------------------+
| Property | Value |
+--------------+---------------------------------------------------------+
| Route Name | app_book |
| Path | /book/{book} |
| Path Regex | {^/book/(?P<book>[^/]++)$}sDu |
| Host | ANY |
| Host Regex | |
| Scheme | ANY |
| Method | ANY |
| Requirements | NO CUSTOM |
| Class | Symfony\Component\Routing\Route |
| Defaults | _controller: App\Controller\BookController::index() |
| Options | compiler_class: Symfony\Component\Routing\RouteCompiler |
| | utf8: true |
+--------------+---------------------------------------------------------+