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'));