Angenommen, ein Kunde auf ihr Konto anmelden können, wo sie ihre Aufträge anzeigen, verwalten Zahlungen, Sicherheitseinstellungen ändern, usw. Admins können das gleiche tun, aber ihre Front-End (dh Ansichten) unterscheiden sich von denen der Kunden, da sie einen privilegierten Zugang und eine bessere Kontrolle der Daten benötigen. JetztOrganisation der Controller-Logik in Laravel
, mit RESTful design, empfiehlt Laravel Routen von Einheiten aufgeteilt, die sie darstellen:
// Orders
Router::get('orders', '[email protected]');
Router::get('orders/{order}', '[email protected]');
// Payments
Router::get('payments', '[email protected]');
Router::get('payments/{payment}', '[email protected]');
// etc.
Wenn ich folgen diesem Muster, dann
- jedes Controller-Methode (zB
[email protected]
,[email protected]
) wird einif-else
Konstrukt haben - eins, um die Logik zu handhaben, wennAuth::user()
ein Kunde ist, und das andere - wenn ein Admin; diese - einige Methoden in Code Redundanz führen kann nie von Kunden genutzt werden (z
delete
oderput
), während sie wahrscheinlich erforderlich für Administratoren sind; dies wird nur hinzufügen Verwirrung
Eine Alternative, die ich denken kann, Code von ist, so etwas zu haben:
// Customer routes
Router::get('account/orders', '[email protected]_orders');
Router::get('account/payments', '[email protected]_payments');
// Admin routes
Router::get('admin/orders', '[email protected]_orders');
Router::get('admin/payments', '[email protected]_payments');
// etc. etc.
Das Problem bei diesem Ansatz ist, dass Controller verworren und groß werden wird all die verschiedenen Methoden für verschiedene Entitäten (zB Order
, Payment
, etc.).
Schließlich kann ich denke an die followind 3. Option:
// Customer routes
Router::get('orders', '[email protected]');
Router::get('payments', '[email protected]');
// Admin routes
Router::get('a/orders', 'Admins/[email protected]');
Router::get('a/payments', 'Admins/[email protected]');
// etc. etc.
/* dir structure: */
/app
/Http
/Controllers
/Admins
OrderController.php -- admins only
PaymentController.php -- admins only
OrderController.php -- customers
PaymentController.php -- customers
Das mit dem RESTful Design erfüllt und trennt admins in ihre eigene Route-Gruppe (mit admin/
Präfix vor jeder Route). Das Problem besteht eindeutig darin, dass einige Steuerungslogik dupliziert wird.
Was ist der beste Ansatz, um damit umzugehen? Irgendwelche anderen Möglichkeiten, es zu tun? Vielen Dank!