1-й вариант: Я думаю, вам нужно создать часть root для вашего URL-адреса. Например, /catalog/
, тогда ваш маршрут будет примерно таким:
Route::get('/catalog/', 'GoodsController@index');
После, где есть два способа создания ваших маршрутов:
- ( На мой взгляд, это плохой способ) Добавьте дополнительные параметры для каждой категории глубины:
Route::get('/catalog/{category?}/{sub_category?}/{sub_sub_category?}..etc', 'CatalogController@index');
И работайте с ним в вашем контроллере.
Есть ли у вас необязательный параметр, например путь к категориям:
Route::get('/catalog/{categories_path?}', 'CatalogController@index');
Затем в вашем контроллере вы можете проанализировать этот путь с помощью функции explode
, например:
// CatalogController.php
public function index(string $categories_path)
{
$categories = explode('/', $categories_path);
if (!is_array($categories)) {
$goods = Goods::all(); //if no category get
return view('catalog', compact('goods')); //return all goods
}
$activeCategory = array_pop($categories); //get the last category from path
// do anything with active category
// $category = Category::whereSlug($activeCategory)->first(); // or something else
}
ПРИМЕЧАНИЕ: Обратите внимание, array_pop
изменяет ваш массив. Дополнительная информация: https://www.php.net/manual/en/function.array-pop.php
2-й вариант: если вы не хотите иметь часть URL-адреса catalog
root, вам необходимо сделать это вручную с помощью регулярного выражения:
Route::get('/{category}/{categories_path?}', 'GoodsController@index')->where('category', '[clothes|shoes|bags]+');
Ссылки: https://laravel.com/docs/7.x/routing#parameters -regular-expression-constraints https://laravel.com/docs/7.x/routing#parameters -optional- параметры
Если я не правильно понял ваш вопрос, дайте мне знать, я изменяю свой ответ.