Laravel 13-tutorial #2: routing, parameters en named routes
geverifieerd op 7 september 2026 · 5 min
Routes declareer je in routes/web.php met Route::get('/chemin', [MonController::class, 'methode']). Geef ze een naam met ->name() zodat je je links via route('nom') opbouwt in plaats van hardcoded. De syntaxis met een string, 'Controller@methode', werkt niet meer sinds Laravel 8.
Een route koppelt een adres aan code. Ze is de ingang van elke request: Laravel leest de gevraagde URL, zoekt de route die erbij past en voert uit waar die naar wijst. Dit hoofdstuk laat de vier vormen zien die zo’n koppeling aanneemt.
De eenvoudigste route
Alle routes van de publieke site declareer je in routes/web.php. Dit staat er meteen na de installatie in:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return view('welcome');
});Deze route zegt: vraagt iemand / op met de methode GET, geef dan de view welcome terug, oftewel het bestand resources/views/welcome.blade.php.
Route::get() krijgt twee argumenten: het adres, en wat er moet gebeuren. Dat tweede argument kan verschillende vormen aannemen.
Een string teruggeven
Route::get('/bonjour', function () {
return 'Bonjour !';
});Ga naar http://127.0.0.1:8000/bonjour: de browser toont de kale tekst. Handig om te controleren of een route werkelijk wordt bereikt, zelden meer dan dat.
Een view teruggeven
Wil je nagaan dat welcome inderdaad de view is die op de homepage verschijnt, open dan resources/views/welcome.blade.php en zet ergens in de <body> een zichtbare regel:
<h1>Bonjour tout le monde !</h1>Herlaad de homepage: de titel verschijnt. Je hebt zojuist een view aangepast, zonder de route aan te raken.
Naar een controller wijzen
In een echt project leeft de logica niet in het routebestand maar in een controller. De route wijst dan alleen nog een klasse en een methode aan:
use App\Http\Controllers\PostController;
Route::get('/article', [PostController::class, 'show']);De array [PostController::class, 'show'] betekent ‘roep de methode show van de klasse PostController aan’. Die controller bestaat nog niet: het volgende hoofdstuk maakt hem. Let op de use boven in het bestand, die de klasse importeert. Zonder die regel zoekt PHP PostController in de globale namespace en vindt hem daar niet.
Veel tutorials die voor Laravel 7 of eerder zijn geschreven, gebruiken Route::get('/article', 'PostController@show'). De automatische namespace-prefix die deze vorm mogelijk maakte, is in Laravel 8 verwijderd. Op Laravel 13 loopt ze stuk met deze melding:
Illuminate\Contracts\Container\BindingResolutionException
Target class [PostController] does not exist.Laravel zoekt de klasse in de root van de namespace in plaats van in App\Http\Controllers. Gebruik altijd de vorm met de array.
De URL-parameters
Een blog heeft variabele adressen nodig: /article/mon-premier-article, /article/un-autre. Het deel dat verandert wordt een parameter, geschreven tussen accolades:
Route::get('/article/{slug}', function (string $slug) {
return "Vous avez demandé l'article : {$slug}";
});Laravel vangt alles op wat achter /article/ komt en geeft het aan de functie door onder de naam $slug. De naam van de parameter in de URL en de naam van het argument moeten overeenkomen.
Je kunt de verwachte vorm afdwingen. Hier antwoordt de route alleen als de identifier numeriek is:
Route::get('/article/{id}', function (int $id) {
return "Article numéro {$id}";
})->whereNumber('id');Een URL als /article/bonjour levert dan een 404 op, in plaats van je code te bereiken met een onverwachte waarde.
Named routes
URL’s hardcoderen in je templates is broos: hernoem je ooit /article/ naar /blog/, dan moet je elke link terugzoeken. De route een naam geven lost dat op:
Route::get('/article/{slug}', [PostController::class, 'show'])->name('post');De link bouw je dan op vanuit die naam, nooit vanuit het adres:
route('post', ['slug' => 'mon-premier-article'])
// http://127.0.0.1:8000/article/mon-premier-articleIn een Blade-view ziet dat er zo uit:
<a href="http://%20route('post',%20$post)%20">{{ $post->title }}</a>Verander het adres in web.php en alle links gaan mee. Vanaf hoofdstuk 7 bouwt deze tutorial al zijn links op die manier.
Route model binding
Laravel kan nog een stap verder. Draagt de parameter de naam van een model, dan haalt het framework het record zelf op:
use App\Models\Post;
Route::get('/article/{post}', function (Post $post) {
return $post->title;
});Laravel leest het URL-segment, bevraagt de tabel posts en geeft vanzelf een 404 terug als er niets bij past. Je krijgt het object rechtstreeks binnen, zonder de query te schrijven. Standaard zoekt hij op de kolom id; hoofdstuk 6 laat zien hoe je hem de slug laat gebruiken.
Die binding scheelt je de helft van de code die een controller gewoonlijk bevat. De rest van de tutorial gebruikt die overal.
De andere HTTP-methodes
Route::get() beantwoordt leesrequests. Voor formulieren en API’s biedt Laravel de andere methodes:
Route::post('/article', [PostController::class, 'store']);
Route::put('/article/{post}', [PostController::class, 'update']);
Route::delete('/article/{post}', [PostController::class, 'destroy']);Deze tutorial gebruikt alleen get: het schrijfwerk loopt via het adminpaneel dat in hoofdstuk 4 wordt geïnstalleerd.
Alle routes bekijken
Dit commando somt op wat je applicatie kan serveren:
php artisan route:list --except-vendorIn het afgeronde project van deze tutorial toont het, zodra het beheerpaneel uit hoofdstuk 4 is geïnstalleerd, ook de routes van de back-office: die worden gedeclareerd door klassen in je map app/Filament, niet door het pakket zelf. Om alleen de pagina’s van de site te zien, voeg je --except-path=admin toe:
php artisan route:list --except-vendor --except-path=admin GET|HEAD / .................................... home › IndexController
GET|HEAD article/{post} ................... post › PostController@show
GET|HEAD categorie/{category} .......... category › CategoryController
GET|HEAD etiquette/{tag} ......................... tag › TagController
GET|HEAD recherche .................... search › PostController@searchDe optie --except-vendor verbergt routes die door geïnstalleerde pakketten zijn toegevoegd, --except-path=admin laat die van het beheerpaneel weg, die wel degelijk van jou zijn. Het is het eerste commando om te draaien wanneer een adres een 404 geeft terwijl je dacht het gedeclareerd te hebben.
Het volgende hoofdstuk maakt de controllers en de views die deze routes aanwijzen.