Was ist ein Controller
Statt sämtliche Request-Verarbeitungslogik als Closures in Routendateien zu definieren, können Sie sie in „Controller”-Klassen organisieren. Ein Controller bündelt zusammengehörige Logik in einer Klasse. EinUserController etwa kann alle eingehenden Anfragen zu Benutzern behandeln – Anzeigen, Anlegen, Aktualisieren, Löschen usw.
Standardmäßig liegen Controller im Verzeichnis app/Http/Controllers.
Controller erstellen
Um schnell einen neuen Controller zu erzeugen, nutzen Sie den Artisan-Befehlmake:controller.
Alle Controller Ihrer Anwendung landen standardmäßig unter app/Http/Controllers.
Basis-Controller
Eine Controller-Klasse kann mehrere öffentliche Methoden besitzen, die auf eingehende HTTP-Anfragen reagieren.show von App\Http\Controllers\UserController aufgerufen und der Routenparameter an sie übergeben.
Controller müssen keine Basisklasse erweitern. Es kann aber praktisch sein, einen Basis-Controller zu haben, der gemeinsame Methoden bereitstellt.
Single Action Controller
Wenn eine Controller-Aktion besonders komplex ist, kann es sinnvoll sein, die ganze Klasse dieser einen Aktion zu widmen. Definieren Sie dazu eine einzige__invoke-Methode.
--invokable erzeugt make:controller einen aufrufbaren Controller.
Resource-Controller
Wenn Sie sich Ihre Eloquent-Modelle als „Ressourcen” vorstellen, führen Sie für jede meist dieselben Operationen (CRUD) aus. Das Resource-Routing von Laravel weist die typischen CRUD-Routen einem Controller mit einer einzigen Zeile Code zu. Mit--resource erstellen Sie den passenden Controller.
app/Http/Controllers/PhotoController.php an.
Der Controller enthält Stubs für alle Aktionen einer Ressource.
Anschließend registrieren Sie die Resource-Route.
| HTTP-Methode | URI | Aktion | Routenname |
|---|---|---|---|
| GET | /photos | index | photos.index |
| GET | /photos/create | create | photos.create |
| POST | /photos | store | photos.store |
| GET | /photos/{photo} | show | photos.show |
| GET | /photos/{photo}/edit | edit | photos.edit |
| PUT/PATCH | /photos/{photo} | update | photos.update |
| DELETE | /photos/{photo} | destroy | photos.destroy |
Mit
php artisan route:list erhalten Sie schnell einen Überblick über die Routen der Anwendung.Teilweise Resource-Routen
Sie können festlegen, welche Aktionen der Controller behandeln soll.API-Resource-Routen
Bei APIs möchten Sie in der Regel keine Routen für HTML-Formulare wiecreate oder edit.
Mit apiResource schließen Sie diese beiden Routen automatisch aus.
Dependency Injection
Constructor Injection
Der Service Container von Laravel löst alle Controller auf. Deshalb können Sie im Konstruktor Type Hints für benötigte Abhängigkeiten angeben. Sie werden automatisch aufgelöst und injiziert.Method Injection
Zusätzlich zur Constructor Injection können Sie Abhängigkeiten auch pro Methode per Type Hint deklarieren. Ein typisches Beispiel ist das Injizieren einerIlluminate\Http\Request-Instanz.
Request und id zu verwenden.
Nächste Schritte
Routing
Frischen Sie das Definieren von Routen und die Anbindung an Controller auf.