Les 2: Routes
HomeLes 2

🗺️ Routes

⏱ Geschatte leestijd: 25 minuten · 5 stappen

Een route koppelt een URL aan een stukje code. Als iemand /producten bezoekt, weet Symfony dankzij de route welke code uitgevoerd moet worden. In deze les leer je hoe je routes definieert in Symfony.

1 Wat is een route?

Stel je voor: een bezoeker typt https://mijnwebsite.nl/producten in de browser. Hoe weet de server wat hij moet laten zien? Dat regelt een route.

🌐
/producten
URL in browser
🗺️
Route
Koppeling
🎮
Controller
Code die draait

In Symfony definieer je routes als PHP Attributes — dat zijn annotaties die je direct boven een methode plaatst. Symfony leest die automatisch in.

2 Je eerste route schrijven

Een route schrijf je als een #[Route(...)] attribuut boven een methode in een Controller-klasse.

src/Controller/ProductController.php
<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;

class ProductController extends AbstractController
{
    // Koppel de URL '/producten' aan deze methode
    #[Route('/producten', name: 'product_index')]
    public function index(): Response
    {
        // Deze code draait als iemand /producten bezoekt
        return new Response('<h1>Lijst van producten</h1>');
    }
}
'/producten'

Het URL-pad dat wordt gematcht

name: 'product_index'

Unieke naam om de route mee te linken

public function index()

De methode die uitgevoerd wordt

3 Route parameters: variabele URL-delen

Soms wil je een variabel stuk in de URL, zoals een product-ID. Dat doe je met accolades: {id}. Symfony geeft die waarde dan automatisch door als parameter.

src/Controller/ProductController.php
// URL: /producten/42 → $id = 42
// URL: /producten/7  → $id = 7
#[Route('/producten/{id}', name: 'product_detail')]
public function detail(int $id): Response
{
    // $id bevat automatisch het getal uit de URL
    return new Response("Je bekijkt product nummer: $id");
}

// Je kunt ook een standaardwaarde instellen
#[Route('/producten/{id}', name: 'product_detail', defaults: ['id' => 1])]
public function detail(int $id = 1): Response
{
    return new Response("Product: $id");
}

🧪 Probeer het uit: welke waarde krijgt $id?

mijnwebsite.nl/producten/
$id = 42

4 Route namen en linken

Je geeft elke route een naam (bijv. product_index). In je templates gebruik je die naam om een link te maken. Zo hoef je geen URL hardcoded in te typen.

templates/product/index.html.twig
{# Maak een link naar de route met naam 'product_index' #}
<a href="{{ path('product_index') }}">Alle producten</a>

{# Link met een parameter (bijv. product met id=5) #}
<a href="{{ path('product_detail', {id: 5}) }}">Product 5</a>

{# In een controller gebruik je redirectToRoute() #}
return $this->redirectToRoute('product_index');

💡 Waarom namen gebruiken? Als je de URL later verandert (van /producten naar /shop), hoef je alleen de route aan te passen — alle links in je templates werken automatisch mee.

5 Oefenen: schrijf je eigen routes

Pas de code hieronder aan. Voeg een nieuwe route toe voor de URL /over-ons met naam over_ons.

src/Controller/PaginaController.php Bewerk de code →
Klik op "Controleer" om je code te testen...

📋 Samenvatting

  • Een route koppelt een URL aan een controller-methode
  • Je schrijft routes als #[Route('/pad', name: 'naam')] boven een methode
  • Met {id} maak je variabele URL-delen (parameters)
  • Gebruik path('route_naam') in Twig om links te maken
  • Geef elke route een unieke naam zodat links flexibel blijven
🧠

Kennischeck

Test of je de stof begrepen hebt

Klaar met deze les? Markeer hem als voltooid!