从Lumen迁移到Laravel时路由版本参数获取问题求助
解决Lumen升级Laravel后的版本路由参数问题
先排查核心错误:请求方法不匹配
你之前的Laravel路由里写的是Route::post,但测试用的curl是GET请求,这直接导致了404,先把路由方法改成Route::get和原Lumen一致。
下面是三种可行的解决方案:
方案1:单路由加正则约束(最简洁)
不用重复定义两个路由,通过正则约束匹配v1/v2版本,一次搞定:
Route::get('/{version}/some_url', 'SomeController@method') ->where('version', 'v1|v2');
请求localhost/v1/some_url或localhost/v2/some_url都会命中该路由,控制器中的$version参数能正常获取对应的值。
方案2:路由分组+参数约束
如果需要用分组管理版本路由,修正前缀参数的约束写法,通过where方法指定版本规则:
Route::prefix('{version}')->where('version', 'v1|v2')->group(function () { Route::get('some_url', 'SomeController@method'); });
分组内的所有路由都会自动带上version参数,控制器可直接接收使用。
方案3:固定前缀路由手动传参
若坚持使用固定前缀分组,可通过路由的defaults字段手动传递版本参数:
Route::prefix('v1')->group(function () { Route::get('some_url', [ 'uses' => 'SomeController@method', 'defaults' => ['version' => 'v1'] ]); }); Route::prefix('v2')->group(function () { Route::get('some_url', [ 'uses' => 'SomeController@method', 'defaults' => ['version' => 'v2'] ]); });
这种方式下,控制器的$version参数会拿到路由预设的对应版本值。
额外注意
控制器方法的参数顺序保持不变即可:
public function method($request, $version) { echo $version; }
内容的提问来源于stack exchange,提问作者Popeye
相关产品推荐
相关产品推荐

