Laravel如何为带可变前缀的路由组添加where参数约束?
问题错误根源
你当前写法的报错原因是Route::prefix()->group()方法的返回值为null,无法在group()之后链式调用where()方法,参数校验规则需要在路由组声明完成前绑定到前缀参数上,调整调用顺序即可。
正确实现代码
写法1:链式调用(推荐)
将where()方法放在group()之前调用,保证所有方法都作用在路由组实例上:
Route::prefix('{hl}') ->where('hl', 'en|pl') ->group(function () { Route::get('/test-1', function () { return 'OK-1'; }); Route::get('/test-2', function () { return 'OK-2'; }); });
写法2:数组配置路由组
如果路由组需要同时配置多组属性,可以用数组形式统一声明:
Route::group([ 'prefix' => '{hl}', 'where' => ['hl' => 'en|pl'] ], function () { Route::get('/test-1', function () { return 'OK-1'; }); Route::get('/test-2', function () { return 'OK-2'; }); });
参数使用说明
路由匹配成功后,你可以直接在路由闭包或者控制器方法中注入$hl参数获取当前匹配的前缀值:
Route::get('/test-1', function (string $hl) { return '当前语言版本:' . $hl; });
以上两种写法都会生成你预期的/{hl}/test-1和/{hl}/test-2路由,且仅当hl参数值为en或pl时才会匹配成功。
内容的提问来源于stack exchange,提问作者Jakub Muda
相关产品推荐
相关产品推荐

