Laravel - Routersource gegen RouteController

Laravel - Routersource gegen RouteController

Problem

Ich habe die Dokumentation auf der Laravel -Website, Stack Overflow und Google gelesen. Ich bin mir jedoch nicht sicher, ob ich den Unterschied zwischen den Unterschied verstehe Route :: Ressource Und Route :: Controller.

Eine Antwort, die ich gefunden habe, sagte Route :: Ressource war für crud. Jedoch mit Route :: Controller Wir können dasselbe erreichen wie mit Route :: Ressource und wir können nur die erforderlichen Aktionen angeben.

Sie scheinen wie Geschwister zu sein:

Route :: Controller ('Post', 'Postcontroller');
Route :: Ressource ('Post', 'Postcontroller');

Wie wir auswählen können, was zu bedienen ist? Was ist die beste Praxis?

Lösung

RESTful Resource Controller

Ein erholsamer Ressourcencontroller legt einige Standardrouten für Sie ein und nennt sie sogar.

Route :: Ressource ('Benutzer', 'usersController');

Gibt Ihnen diese benannten Routen:

Verb Pfad Aktion Routenname
Get /Benutzer Index -Benutzer.Index
Get /Benutzer /Erstellen von Benutzern erstellen.erstellen
Post /Benutzer speichern Benutzer.speichern
Get /Benutzer /Benutzer Benutzer anzeigen.zeigen
Get/Benutzer/Benutzer/Bearbeiten Benutzer bearbeiten.bearbeiten
Put | Patch /Benutzer /Benutzer Aktualisieren Sie Benutzer.aktualisieren
Löschen /Benutzer /Benutzer Benutzer zerstören.zerstören

Und Sie würden Ihren Controller so etwas einrichten (Aktionen = Methoden)

Class UsersController erweitert BaseController
public function index ()
öffentliche Funktionshow ($ id)
public function store ()

Sie können auch wählen, welche Aktionen wie folgt enthalten oder ausgeschlossen sind:

Route :: Ressource ('Benutzer', 'UsersController', [
"nur" => ["Index", "Show"]
]);
Route :: Ressource ('Affen', 'MonkeysController', [
'außer' => ['bearbeiten', 'erstellen']
]);

RESTful Resource Controller -Dokumentation

Implizite Controller

Ein impliziter Controller ist flexiblerer. Sie werden anhand des HTTP -Anforderungsarts und -namens an Ihre Controller -Methoden weitergeleitet. Sie haben jedoch keine Routennamen für Sie definiert und es wird alle Unterordner für dieselbe Route erfassen.

Route :: Controller ('Benutzer', 'UserController');

Würde Sie dazu führen, dass Sie den Controller mit einer Art erholsamer Namensschema einrichten:

Klasse UserController erweitert Basecontroller
Öffentliche Funktion getIndex ()

// Anfrage zum Index abrufen

öffentliche Funktion getshow ($ id)

// Anfrage an 'Benutzer/show/id' erhalten

öffentliche Funktion poststore ()

// Anfrage an "Benutzer/Store" veröffentlichen

Implizite Controller -Dokumentation
Es ist eine gute Praxis, das zu verwenden, was Sie brauchen, gemäß Ihrer Präferenz. Ich persönlich mag die impliziten Controller nicht, weil sie unordentlich sein können, keine Namen angeben und bei der Verwendung von PHP -Artisanrouten verwirrend sein können. Ich verwende normalerweise rastful Ressourcencontroller in Kombination mit expliziten Routen.

Die andere Meinung ist, dass Sie möglicherweise nicht zu viele Controller für jede Aktion erstellen möchten, die alle CRUD -Methoden enthalten. Verwenden Sie in diesem Fall die impliziten Controller.