Laravel 4.2 走错路了
Posted
技术标签:
【中文标题】Laravel 4.2 走错路了【英文标题】:Laravel 4.2 going to the wrong route 【发布时间】:2019-01-27 23:41:51 【问题描述】:这是我正在访问的网址:http://example.com/hotel/expired
而不是去这条路线的好控制器
Route::get('/hotel/expired', ModuleLoader::load_controller(_ACCOUNT , 'redirectExpired'));
这是使用的路线:
Route::post('/hotel/search', 'HotelControllerB2C@search');
但是,如果我为此 /hotel/session/expired 更改我的 /hotel/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 认为 /hotel/expired 是 /hotel/search ?一种使用 post 方法,另一种使用 get ...
【问题讨论】:
尝试将路由 /hotel/expired 放在 /hotel/sid 之前,并使用正则表达式指定路由参数不应为空 【参考方案1】:Larval 中的路由按照您定义的顺序进行解析。之后你有/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'));
【讨论】:
以上是关于Laravel 4.2 走错路了的主要内容,如果未能解决你的问题,请参考以下文章
从 SQL Server 2008 迁移到 MS access 2007