2017-02-09 4 views
1

я должен маршрут конфиг, чтобы ответить на этот адрес:Routing Laravel конфликт

  • /SomeStaticString
  • /{категория}/{идентификатор}

Для этого я написал этот код файл web.php:

Route::get('/SomeStaticString','[email protected]'); 
Route::get('/{main_category}/{slug}','[email protected]')->where('main_category', '^(?!SomeStaticString$).*'); 

Это правильный способ обработки этих URL-адресов? Если мне нужно добавить другой url "SomeStaticString" в мое приложение, какова наилучшая реализация маршрута?

+0

вы имели в виду '-> где ('main_category',«^ (?! addClickBanner $). * '); '? Если 'id_banner' - это цифра, а' slug' - нет, вы можете просто ограничить 'id_banner' с помощью' [0-9] + ' –

+0

Использование только параметров маршрута, например, в Route :: get ('/ {main_category}/{slug} '...) будет захватывать каждый uri, если uri явно не указан до этого маршрута. – Birdman

+0

Вы должны пометить маршрут, как '/ {main_category}/{slug}', по каждому интересующему вас маршруту. Новый маршрут, например 'SomeStaticString', должен быть размещен над этим маршрутом. –

ответ

1

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

//This will work 
Route::get('foo', ' [email protected]'); 
Route::get('{bar}', '[email protected]'); 

//In this order, foo will never get called 
Route::get('{bar}', '[email protected]');  
Route::get('foo', ' [email protected]'); 

При запуске добавить больше сегментов в свой путь, вы всегда хотите сохранить символы в задней части их соответствующих подгрупп. Так следует упорядочивать постепенно растущее дерево маршрутов.

//This is good 
Route::get('foo', ' [email protected]'); 
Route::get('foo/bar', ' [email protected]'); 
Route::get('foo/{id}', '[email protected]'); 
Route::get('foo/bar/stuff', '[email protected]'); 
Route::get('foo/bar/{id}', '[email protected]'); 
Route::get('foo/{bar}/stuff', '[email protected]'); 
Route::get('foo/{bar}/{id}', '[email protected]'); 

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

Route::get('/addClickBanner/{id_banner}','[email protected]'); 
Route::get('someStaticString/{main_category}/{slug}','[email protected]')->where('main_category', '^(?!SomeStaticString$).*'); 
+0

Отлично! Отлично работает! Спасибо @Zach –