Как грамотно спроектировать маршруты?

104
22 января 2022, 12:10

Если 3 страницы:

  1. Список произведений.
  2. Список коллекций.
  3. Список цветов.

Логика:

Со страницы производителя можно перейти на страницу со списком всех коллекций этого производителя или на страницу со списком всех цветов этого производителя.

Если мы перешли на страницу со списком всех цветов этого производителя.

Если мы перешли на страницу со списком всех коллекций этого производителя.

Со страницы со списком всех коллекций этого производителя можно перейти конкретно в определенную коллекцию.

Что есть сейчас:

// Список всех производителей.
/manufacturers
// Цвета определенного производителя.
/manufacturers/{id}/colors
// Коллекции определенного производителя.
/manufacturers/{id}/collections
// Цвета определенной коллекции.
/manufacturers/{id}/collections/{id}/colors

Почему-то кажется, что есть более правильное решение. Мне не нравится, что когда мы получаем цвета определенной коллекции — мне нужно принимать в методе два параметра, хотя используется только второй (цвета у меня связаны только с коллекциями). Вторая проблема в том, что /manufacturers/{вот сюда можно написать что угодно и это будет работать}/collections/{id}/colors.

Контроллер который отвечает за цвет — один. В итоге нужно городить проверки, чтобы понять, это id производителя или коллекции. Я точно делаю что-то не так.

Answer 1
/** 
* Список всех производителей.
* контроллер: manufacturers 
* метод: index
*/ 
/manufacturers
/** 
* Цвета определенного производителя.
* контроллер: manufacturers 
* метод: colors
*/ 
/manufacturers/colors/{id_manufacturer}
/** 
* Коллекции определенного производителя.
* контроллер: manufacturers 
* метод: collections
*/ 
/manufacturers/collections/{id_manufacturer}
/** 
* Цвета определенной коллекции.
* контроллер: collections
* метод: colors
*/ 
/collections/colors/{id_collectionsr}
Answer 2
Route::prefix('manufactures')->group(function () {
    Route::get('/', "ControllerName@FunctionName); 
    Route::get('{manufacture}/colors', 'ControllerName@FunctionName'); // +  в аргументе функции указываешь что это класс App\Manufacture, это называется бинд модели
})

https://laravel.com/docs/5.8/routing#route-model-binding И не надо будет городить проверки

READ ALSO
Динамические запросы с параметрами в MySQL

Динамические запросы с параметрами в MySQL

Курил документацию по MySQL и не до конца понял, как передавать аргументы в динамический запрос

65
Не подключается к MySQL серверу

Не подключается к MySQL серверу

Не могу подключиться к удаленной БД mysql

177
Как удалить tr через closest, используя event.target?

Как удалить tr через closest, используя event.target?

Всем привет! Подскажите, пожалуйста, как реализовать удаление строки tr через нажатие иконку fa-trashВот здесь DOM, внизу опишу свой скрипт

178
Проблема c импортом классов в WebDriverIo js

Проблема c импортом классов в WebDriverIo js

Не могу понять второй день в чем проблема,начал учится автоматизированию тестов,писал все в одном файле по началу ,взлетало норм,после деструкторизации...

151