wake-up-neo.com

Laravel - Route :: resource vs Route :: controller

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?

115
Sonique

RESTful Resource Controller

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


Impliziter 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.

237
ryanwinchester

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.

3
Ahmad Sharif