Resource Controllers
Laravel Resource Routing weist die typischen "CRUD"-Routen einer Steuerung mit einer einzigen Codezeile zu. Beispielsweise können Sie einen Controller erstellen, der alle HTTP-Anfragen für "Fotos", die von Ihrer Anwendung gespeichert werden, verarbeitet. Mit dem Befehl make:controller Artisan können wir einen solchen Controller schnell erstellen:
php artisan make:controller PhotoController --resource
Dieser Befehl erzeugt einen Controller unter app/Http/Controllers/PhotoController.php. Der Controller enthält für jede der verfügbaren Ressourcenoperationen eine Methode.
Als nächstes können Sie eine findige Route zum Controller registrieren:
Route::resource('photos', 'PhotoController');
Diese Single-Route-Deklaration erstellt mehrere Routen, um eine Vielzahl von Aktionen auf der Ressource durchzuführen. Der generierte Controller wird bereits Methoden für jede dieser Aktionen haben, einschließlich Notizen, die Sie über die HTTP-Verben und URIs informieren, die sie behandeln.
Sie können mehrere Ressourcen-Controller auf einmal registrieren, indem Sie ein Array an die Ressource-Methode übergeben:
Route::resources([
'photos' => 'PhotoController',
'posts' => 'PostController'
]);
Aktionen, die vom Ressourcencontroller ausgeführt werden.
Verb |
URI |
Action |
Route Name |
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 |
Specifying The Resource Model
Wenn Sie die Route-Modell-Bindung verwenden und möchten, dass die Methoden des Ressourcen-Controllers einen Typ-Hinweis auf eine Modellinstanz geben, können Sie beim Erzeugen des Controllers die Option --model verwenden:
php artisan make:controller PhotoController --resource --model=Photo
Spoofing Form Methods
Da HTML-Formulare keine PUT-, PATCH- oder DELETE-Anfragen stellen können, müssen Sie ein verstecktes _method Feld hinzufügen, um diese HTTP-Verben zu manipulieren. Die @method Blade Direktive kann dieses Feld für Sie erstellen:
<form action="/foo/bar" method="POST">
@method('PUT')
</form>