Я только недавно попал в MVC и Laravel и у меня возник вопрос о том, как правильно обращаться с вещами.
Допустим, я создаю сайт с его CMS или чем-то подобным.
У меня есть целевая страница www.website.com с CMS по адресу www.website.com/cms/
В CMS есть меню навигации, каждый элемент которого представляет собой таблицу в БД.
Допустим, — Счета | Статьи | Меню — при нажатии на каждый пункт должен появиться список записей в каждой из таблиц.
Для этого я делаю:
а) есть маршрут
Route::get('cms/{requestedtable}', 'PagesController@CmsCreate');
И на этом маршруте я бы
switch($requestedtable)
case 'accounts';
$data = Account::all();
case 'menu'
$data = Menu::all();
б) иметь маршрут для каждого пункта
Route::get('cms/accounts/', 'AccountController@index');
public function index() {
Account::all()
То же самое для вставки, обновления и удаления. Было бы правильнее создать маршрут для каждого из событий
Route::get('cms/accounts/', 'AccountController@index');
Route::get('cms/accounts/create', 'AccountController@create');
Route::get('cms/accounts/update', 'AccountController@update');
Или только один маршрут, но с использованием другой функции
Route::get('cms/{{requestedtable))/update', 'PageController@CmsUpdate');
Чего я боюсь с динамической опцией, так это того, что у меня будет 30 глубоких переключателей, если у меня будет 30 таблиц. Но опять же, у меня также будет 30 контроллеров, если у меня будет 30 таблиц. Я всегда хочу, чтобы мой код был как можно более стандартизирован (это даже слово), даже если я один работаю над этим. Мне нравится делать вещи правильно.
Спасибо за любой вклад по этому вопросу.
Ну, нет правильного или неправильного, и оба способа верны, хотя я предпочитаю иметь много маршрутов, чем один маршрут с подстановочным знаком и добавление дополнительной логики. Это кажется неправильным, и я уверяю вас, что в будущем вы об этом пожалеете.
Также я заметил, что вы заинтересованы в выполнении типичных операций CRUD, используя Контроллер ресурсов это хороший способ сохранить ваши routes.php
чистый. Обратите внимание, что хотя контроллеры ресурсов обычно используются в API REST, их можно использовать в любом веб-приложении.
Вот как будет выглядеть ваш route.php:
Route::group(['prefix' => 'cms'], function()
{
Route::resource('Accounts','AccountsController');
Route::resource('Articles','ArticlesController');
Route::resource('Menu','MenuController');
});
И это будут доступные маршруты:
Обратите внимание, что вы также можете использовать подстановочные знаки на контроллерах ресурсов, как указано Вот:
Route::resource('{resource}', 'PagesController');
Других решений пока нет …