Laravel FormRequest验证中如何让in规则错误提示显示预定义合法选项
Laravel FormRequest in验证规则显示合法可选值实现方案
Laravel的in验证规则内置了:values占位符,只要自定义对应规则的错误提示,调用该占位符即可自动展示所有预定义的合法值,无需手动重复维护选项列表。
方法一:单表单自定义提示(FormRequest内实现)
在对应FormRequest类中重写messages()方法,为目标字段的in规则指定提示文本,引入:values占位符:
// 定义验证规则 public function rules() { return [ 'rule' => 'required|in:Option1,Option2,Option3', ]; } // 自定义错误提示 public function messages() { return [ 'rule.in' => '所选:attribute无效,合法可选值为::values', ]; }
验证失败时,提示会自动渲染为类似:所选rule无效,合法可选值为:Option1, Option2, Option3
如果需要全局生效,直接修改项目语言包下的validation.php配置文件,修改in规则对应的默认提示即可,所有使用in规则的字段都会自动带出合法值:
// 以中文语言包为例,文件路径:lang/zh_CN/validation.php 'in' => '所选 :attribute 无效,允许的取值为::values。',
方法二:数组形式定义规则(适合选项复用/多值场景)
如果可选值较多、需要在多处复用,可使用Rule门面的in()方法传入允许值数组,规则维护更方便,:values占位符依然可以正常识别数组内容:
use Illuminate\Validation\Rule; public function rules() { // 统一维护允许的选项列表 $allowedValues = ['Option1', 'Option2', 'Option3']; return [ 'rule' => [ 'required', Rule::in($allowedValues) ], ]; }
后续调整可选值只需要修改$allowedValues数组即可,规则、错误提示会自动同步,不需要多处修改。
其他说明
- 你当前看到的错误提示
"The rule type is invalid."是默认提示The selected :attribute is invalid.替换字段名(你的字段名是rule)后的正常渲染结果,不是验证规则本身失效。 - 如果使用PHP 8.1+的枚举类型做验证,可通过
Rule::enum()绑定枚举类,自定义提示时可通过闭包动态获取枚举的所有取值拼接展示。
内容的提问来源于stack exchange,提问作者mw.7225
相关产品推荐
相关产品推荐

