Ich habe die Dokumente auf der Laravel Website, Stack Overflow und Google gelesen, verstehe aber immer noch nicht den Unterschied zwischen Route::resource
und Route::controller
.
Eine der Antworten lautete: Route :: resource was for crud. Mit Route :: controller können wir jedoch dasselbe wie mit Route :: resource erreichen und nur die erforderlichen Aktionen angeben.
Sie scheinen wie Geschwister zu sein:
Route::controller('post','PostController');
Route::resource('post','PostController');
Wie können wir auswählen, was wir verwenden möchten? Was ist eine gute Praxis?
Ein RESTful Resource Controller richtet einige Standardrouten für Sie ein und benennt sie sogar.
Route::resource('users', 'UsersController');
Gibt Ihnen diese benannten Routen:
Verb Path Action Route Name
GET /users index users.index
GET /users/create create users.create
POST /users store users.store
GET /users/{user} show users.show
GET /users/{user}/edit edit users.edit
PUT|PATCH /users/{user} update users.update
DELETE /users/{user} destroy users.destroy
Und Sie würden Ihre Steuerung so etwas einrichten (Aktionen = Methoden)
class UsersController extends BaseController {
public function index() {}
public function show($id) {}
public function store() {}
}
Sie können auch wählen, welche Aktionen wie folgt eingeschlossen oder ausgeschlossen werden:
Route::resource('users', 'UsersController', [
'only' => ['index', 'show']
]);
Route::resource('monkeys', 'MonkeysController', [
'except' => ['edit', 'create']
]);
Dokumentation zu RESTful Resource Controller
Ein impliziter Controller ist flexibler. Sie werden auf der Grundlage des HTTP-Anforderungstyps und -namens zu Ihren Controller-Methoden weitergeleitet. Es sind jedoch keine Routennamen für Sie definiert, und es werden alle Unterordner für dieselbe Route abgerufen.
Route::controller('users', 'UserController');
Würde Sie veranlassen, den Controller mit einer Art RESTful-Benennungsschema einzurichten:
class UserController extends BaseController {
public function getIndex()
{
// GET request to index
}
public function getShow($id)
{
// get request to 'users/show/{id}'
}
public function postStore()
{
// POST request to 'users/store'
}
}
Implizite Controller-Dokumentation
Es ist empfehlenswert, das zu verwenden, was Sie benötigen. Ich persönlich mag die impliziten Controller nicht, weil sie unübersichtlich sein können, keine Namen enthalten und bei Verwendung von php artisan routes
. Normalerweise verwende ich RESTful Resource Controller in Kombination mit expliziten Routen.
Für die Route-Controller-Methode müssen wir nur eine Route definieren. In der get oder post Methode müssen wir die Route separat definieren.
Mithilfe der Ressourcenmethode werden mehrere Routen erstellt, um eine Vielzahl von Restful-Aktionen auszuführen.
Hier das Laravel Dokumentation dazu.