Laravel路由参数正则约束:如何限定参数为配置文件指定枚举值
解决Laravel API路由参数约束问题
没问题,这其实很容易实现,咱们直接用Laravel路由的参数约束功能结合你的配置文件来搞定:
方法1:直接写死正则约束(快速实现)
如果你的类型暂时不会变动,可以直接在路由组后用where()方法指定允许的参数值:
$api->group(['prefix' => 'Tag/{type}'], function ($api) { // 在这里定义你的子路由,比如: $api->get('/', 'TagController@listTags'); $api->post('/', 'TagController@createTag'); })->where('type', 'product|user');
这里的正则表达式product|user表示type参数只能是这两个值中的一个,不符合的请求会直接返回404。
方法2:从配置文件动态生成约束(最佳实践)
如果以后可能会在配置里新增类型,推荐从配置文件动态生成正则规则,这样不用每次改路由代码:
// 从配置文件获取允许的类型列表,转成正则需要的|分隔格式 $allowedTagTypes = implode('|', array_keys(config('tag.types'))); // 因为你的配置里键和值是一样的,用array_values()也可以,效果相同 $api->group(['prefix' => 'Tag/{type}'], function ($api) { // 子路由定义... })->where('type', $allowedTagTypes);
这样只要你在配置文件的types数组里新增或修改值,路由约束会自动同步更新,非常灵活。
原理说明
Laravel的路由where()方法可以接收参数名和正则表达式,用来约束路由参数的格式。这里的正则product|user是分支选择语法,匹配其中任意一个字符串就能通过校验。
内容的提问来源于stack exchange,提问作者Ahmad Badpey
相关产品推荐
相关产品推荐

