2016-12-08 2 views
1

У меня есть это в моей web.php (Laravel 5,3)Laravel исключить маршрут

Route::get('/{perfil}/{seccion}', '[email protected]')->where(['perfil' => '(perfil|profile)'])->where(['seccion' => '(mis-hoteles|my-properties)']); 
Route::get('/{perfil}/{seccion}', '[email protected]')->where(['perfil' => '(perfil|profile)']); 

Я хочу URLs /perfil/mis-hoteles и /profile/my-properties быть подан первый маршрут. И URL-адреса /perfil/[whatever] и /profile/[whatever] будут обслуживаться вторым маршрутом.

Не работает, /perfil/mis-hoteles перенаправляется по второму маршруту.

Я также пытался что-то вроде

Route::get('/{perfil}/{seccion}', '[email protected]')->where(['perfil' => '(perfil|profile)','seccion' => '^(!mis\-hoteles$)']) 

для второго маршрута, но он не работает.

Что я делаю неправильно? Странная вещь, если удалить второй маршрут и оставить только

Route::get('/{perfil}/{seccion}', '[email protected]')->where(['perfil' => '(perfil|profile)'])->where(['seccion' => '(mis-hoteles|my-properties)']); 

это работает, так что матч. Почему, если есть матч, laravel продолжает искать совпадение, обнаруживая второй маршрут?

ответ

0

Laravel не нравится, когда ваши маршруты имеют один и тот же метод и sring URI. Если у вас есть два маршрута с такими же методами и uri strings (а не фактический урис, который они будут получать), что вы делаете, он просто переопределяет его.

Так что нам нужно "trick" это немного.

Вместо этого:

Route::get('/{perfil}/{seccion}', '[email protected]')->where(['perfil' => '(perfil|profile)'])->where(['seccion' => '(mis-hoteles|my-properties)']); 
Route::get('/{perfil}/{seccion}', '[email protected]')->where(['perfil' => '(perfil|profile)']); 

Мы будем "ложь" и сказать:

Route::get('/{perfil}/{seccion}', 'HotelsC[email protected]')->where(['perfil' => '(perfil|profile)'])->where(['seccion' => '(mis-hoteles|my-properties)']); 
Route::get('/{perfil}/{section}', '[email protected]')->where(['perfil' => '(perfil|profile)']); 

Обратите внимание на {perfil}/{seccion} и {perfil}/{section} только это одна буква будет сказать Laravel, что мы не» t хотите переопределить старый маршрут.

Не забудьте изменить принятый параметр в контроллерах соответственно.

Надеюсь, что это решает вашу проблему, это было для меня.

Смежные вопросы