Laravel 4.2 идет по неверному маршруту

Это URL, к которому я обращаюсь: http://example.com/hotel/expired

вместо этого, чтобы пойти на хороший контроллер для этого маршрута

Route::get('/hotel/expired', ModuleLoader::load_controller(_ACCOUNT , 'redirectExpired'));

Этот маршрут используется:

Route::post('/hotel/search', 'HotelControllerB2C@search');

Однако, если я изменю свой / hotel / просроченный маршрут для этого / hotel / session / expired, будет использован правильный контроллер

Route::any('/hotel/search/{dep_date}/{dep_code}/{ret_date}/{ages}', 'HotelControllerB2C@showSearch');
Route::any('/hotel/search/{dep_date}/{dep_code}/{ret_date}/{ages}/{property_type}', 'HotelControllerB2C@showSearch');
Route::post('/hotel/search', 'HotelControllerB2C@search');
Route::get('/hotel/detail/{index}', 'HotelControllerB2C@showDetail');
Route::post('/hotel/detail', 'HotelControllerB2C@detail');
Route::get('/hotel/{sid}', ModuleLoader::load_controller(_ACCOUNT , 'showPreviousSearch'));
Route::any('/hotel/confirmation/{url}', ModuleLoader::load_controller(_ACCOUNT , 'confirmation'));
Route::get('/hotel/expired', ModuleLoader::load_controller(_ACCOUNT , 'redirectExpired'));

почему Laravel думаю / отель / истек срок действия / отель / поиск? одно использование метода post, а другое использование get...

1 ответ

Маршруты в Ларвале разрешаются в указанном вами порядке. У тебя есть /hotel/{sid} а также /hotel/expired после этого, так в этом случае:

/hotel/anything => goes to /hotel/{sid} route
/hotel/expired => also goes to /hotel/{sid} route

Чтобы избежать этого, вы должны сначала определить наиболее конкретный маршрут, а затем более общий, поэтому в вашем случае вы должны указать строку:

Route::get('/hotel/expired', ModuleLoader::load_controller(_ACCOUNT , 'redirectExpired'));

до

Route::get('/hotel/{sid}', ModuleLoader::load_controller(_ACCOUNT , 'showPreviousSearch'));
Другие вопросы по тегам