Конечно не совсем правильная, свой роутер на коленке получился.
В чем проблема сделать 3 отдельных роута для меню, брендов, товаров?
И тогда они не будут пересекаться, и не надо будет делать вот эту кашу малашу с определением куда зашел пользователь.
Ну лишние элементы в URI с точки зрения СЕО совсем ник чему на сайте...
Да и кроме вывода информации с ветвлением удобней будет давать разные метатеги в и многое другое делать
Александр Аксентьев, Скорее гадания )
Ну еще мне нравится, когда можно затереть в адресной строке последний элемент и попадаешь на шаг вперед по хлебным крошкам.
Если работает - правильная. Но не красиво.
1. Для пагинации есть https://laravel.com/docs/5.6/pagination. Так что {page} тут лишний. И вообще - /brand/2 - 2 должен быть брэндом на не номером страницы.
2. Я так понял, что brand|product длжны быть в таблице меню? Роуты можно регистрировать в цикле по таблице меню: не зарегистрирован - значит не найден. что-то вроде
foreach(\App\Menu::all() as $menu){
Route::get($menu->module_slug, $menu->module_slug.'Controller@index');
Route::get($menu->module_slug.'/{slug}', $menu->module_slug.'Controller@by_slug');
}
// хотя если пунктов меню не слишком много лучше сделать как предложено выше
...
// module_slug = 'Brand'
class BrandController{
... index(){}
.... by_slug(\App\Brand $slug){}
}