переключить маршрут в web.php laravel

У меня есть 2 маршрута в моем web.php

1) Route::get('/{url}', 'MenuController@menu');

которые предоставляют URL:

  • /меню

2) Route::get('/{name}', 'HomeSlideviewController@index')->name('promotiondetail');

которые предоставляют URL:

  • / меню (другая страница, но то же имя в маршруте 1)
  • / еда

Я хочу использовать маршрут 2, если route = то же имя. Я хочу использовать маршрут 1, если у маршрута 1 нет URL. Он будет использовать маршрут 2. В web.php их все равно делать что-то вроде

if(Route::get('/{url}', 'MenuController@menu')) is null use

`Route::get('/{name}', 'HomeSlideviewController@index')->name('promotiondetail');`

сейчас в моем web.php я делаю это

 Route::get('/{url}', 'MenuController@menu');
Route::get('/{name}', 'HomeSlideviewController@index')->name('promotiondetail');

когда я иду / еда будет идти страница не найдена.

ОБНОВИТЬ

В моем контроллере я пытаюсь это

try {
// if find url
}
} catch (\Exception $e) {
//if not find url
return redirect()->route('promotiondetail', $url);
}

и он возвращает ошибку перенаправил вас слишком много раз

ОБНОВЛЕНИЕ 3

$ url = еда

0

Решение

Ваша проблема в том, что когда вы используете

Route::get('/{url}', 'MenuController@menu');
Route::get('/{name}', 'HomeSlideviewController@index')->name('promotiondetail');

у вас тот же запрос, потому что {url} или {name} являются необязательными параметрами, и в результате он всегда будет соответствовать первому случаю. Лучшее решение для вас может быть использование этой части кода:

Route::get('/menu', 'MenuController@menu');
Route::get('/{name}', 'HomeSlideviewController@index')->name('promotiondetail');

У вас всегда должен быть последний с дополнительными параметрами, потому что в противном случае он всегда будет выполняться первым, потому что он будет совпадать. И что вы должны помнить, что использование /{name} он будет соответствовать чему угодно, он похож на переменную и может содержать число, а также может быть строкой, например, URL может быть domain/{anything}, Если вы используете /name это будет соответствовать только если у вас есть domain/name как запрос

Вы можете прочитать Laravel маршрутизация для получения дополнительной информации о маршрутизации.

3

Другие решения

Проблема в том, что оба маршрута одинаковы, / {что-то}.

У вас есть пара решений.
Во-первых, разберитесь со своими маршрутами, сделайте их немного разными, чтобы они не соответствовали друг другу, и исправьте порядок.
Например;

Route::get('/promo/{name}', 'HomeSlideviewController@index')->name('promotiondetail');
Route::get('/{url}', 'MenuController@menu')->name('menu');

Другое решение, которое может вам помочь, — это сначала разместить маршрут по акции и проверить его на то же имя, если нет, то перенаправить на другой контроллер. Так что в вашей индексной функции HomeSlideviewController попробуйте что-то вроде;

public function index($name) {
if ($name !== 'whatever you want it not to be') {
return redirect()->route('menu);
}
// continue
}
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector