【问题标题】:Laravel 4.2 going to the wrong routeLaravel 4.2 走错路了
【发布时间】: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} 之前,并使用正则表达式指定路由参数不应为空

标签: php laravel laravel-4 routes laravel-routing


【解决方案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'));

【讨论】:

    猜你喜欢
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    • 2019-12-04
    • 2019-01-13
    • 2016-01-21
    • 1970-01-01
    • 2016-06-26
    相关资源
    最近更新 更多