Skip to main content

Wat zijn controllers?

In plaats van alle logica voor het afhandelen van requests als closures in je routebestanden te definiëren, kun je dit gedrag organiseren met “controller”-klassen. Controllers laten je gerelateerde request-logica bundelen in één klasse. Een UserController-klasse kan bijvoorbeeld alle inkomende requests met betrekking tot gebruikers afhandelen, zoals het tonen, aanmaken, bijwerken en verwijderen van gebruikers. Standaard worden controllers opgeslagen in de map app/Http/Controllers.

Controllers maken

Om snel een nieuwe controller te genereren, gebruik je het Artisan-commando make:controller. Alle controllers van je applicatie worden standaard opgeslagen in de map app/Http/Controllers.

Basiscontrollers

Een controllerklasse kan meerdere publieke methoden hebben die reageren op inkomende HTTP-requests.
Zodra je een controllerklasse en methode hebt gemaakt, kun je als volgt een route naar de controllermethode definiëren:
Wanneer een inkomend request overeenkomt met de opgegeven route-URI, wordt de show-methode van de klasse App\Http\Controllers\UserController aangeroepen en worden de routeparameters aan de methode doorgegeven.
Controllers hoeven geen basisklasse te extenden. Het kan echter handig zijn om een basiscontrollerklasse te extenden met methoden die alle controllers moeten delen.

Single-action controllers

Als een controlleractie bijzonder complex is, kan het handig zijn om een hele controllerklasse aan die ene actie te wijden. Dit bereik je door binnen de controller één enkele __invoke-methode te definiëren.
Bij het registreren van een route voor een single-action controller hoef je geen controllermethode op te geven. Je geeft alleen de naam van de controller door aan de router.
Met de optie --invokable van het Artisan-commando make:controller kun je een invokable controller genereren.

Resource controllers

Als je elk Eloquent-model in je applicatie als een “resource” beschouwt, is het gebruikelijk om op elke resource dezelfde set operaties (CRUD) uit te voeren. Met resource-routing van Laravel wijs je de typische routes voor aanmaken, lezen, bijwerken en verwijderen (CRUD) met één regel code toe aan een controller. Met de optie --resource van het Artisan-commando make:controller kun je snel een controller maken die deze acties afhandelt.
Dit commando genereert een controller in app/Http/Controllers/PhotoController.php. De controller bevat stub-methoden voor elke beschikbare resource-operatie. Vervolgens registreer je een resource-route die naar de controller wijst:
Deze ene routeregel maakt meerdere routes aan die de verschillende acties op de resource afhandelen. De gegenereerde controller bevat al stub-methoden voor elk van deze acties.
Voer het commando php artisan route:list uit om snel een overzicht van de routes van je applicatie te bekijken.

Gedeeltelijke resource-routes

Bij het declareren van een resource-route kun je een subset van acties opgeven die de controller moet afhandelen.

API-resource-routes

Bij het declareren van resource-routes voor een API wil je vaak routes uitsluiten die HTML-templates tonen, zoals create en edit. Met de apiResource-methode worden deze twee routes automatisch uitgesloten.

Middleware-attributen

Je kunt ook middleware aan een controller toewijzen met PHP-attributen.
Je kunt middleware-attributen ook op individuele controllermethoden zetten. Middleware die je aan een methode toewijst, wordt toegevoegd aan de middleware die je op klasseniveau hebt toegewezen.

Dependency injection

Constructor injection

De servicecontainer van Laravel wordt gebruikt om de afhankelijkheden van alle Laravel-controllers te resolven. Daarom kun je de afhankelijkheden die je controller nodig heeft via type-hints opgeven in de constructor van de controller. De gedeclareerde afhankelijkheden worden automatisch geresolved en in de controllerinstantie geïnjecteerd.

Method injection

Naast constructor injection kun je ook de afhankelijkheden van controllermethoden via type-hints opgeven. Een veelvoorkomende use case voor method injection is het injecteren van een Illuminate\Http\Request-instantie in een controllermethode.
Als een controllermethode ook invoer uit routeparameters verwacht, zet je de route-argumenten na de overige afhankelijkheden. Stel bijvoorbeeld dat je route als volgt is gedefinieerd:
Door je controllermethode als volgt te definiëren, kun je Illuminate\Http\Request type-hinten en tegelijkertijd toegang krijgen tot de id-parameter:
Door dependency injection te gebruiken, kun je bij het testen gemakkelijker mocks injecteren, wat de testbaarheid van je code verbetert.

Volgende stappen

Routing

Bekijk opnieuw hoe je routes definieert en hoe ze met controllers samenwerken.
Laatst gewijzigd op 6 september 2026