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. EenUserController-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-commandomake: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.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.
--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.
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:
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, zoalscreate 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.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 eenIlluminate\Http\Request-instantie in een controllermethode.
Illuminate\Http\Request type-hinten en tegelijkertijd toegang krijgen tot de id-parameter:
Volgende stappen
Routing
Bekijk opnieuw hoe je routes definieert en hoe ze met controllers samenwerken.