Laravel中自定义taxonomies数组验证消息格式的实现方案
Laravel自定义嵌套数组验证错误消息
你的需求是将taxonomies.*.values.*字段的required验证错误消息,从默认的The taxonomies.0.values.key1 field is required.修改为The key1 value is required at array 0,可以通过以下方式实现:
实现步骤
在你的表单请求类(继承自FormRequest的类)中,新增messages()方法,利用闭包动态解析属性路径并生成自定义错误消息:
public function rules() { return [ 'title' => 'required|string', 'taxonomies' => 'required|array', 'taxonomies.*.id' => 'required|string|exists:taxonomies,id', 'taxonomies.*.values' => 'required|array|min:2', 'taxonomies.*.values.*' => 'required', 'currency' => 'required|string', 'client_budget' => 'required|numeric', ]; } public function messages() { return [ 'taxonomies.*.values.*.required' => function ($attribute, $value, $parameters) { // 拆分属性的点分隔路径,比如将"taxonomies.0.values.key1"拆分为数组 $attributeParts = explode('.', $attribute); // 提取taxonomies数组的索引 $taxonomyIndex = $attributeParts[1]; // 提取values数组的键名 $valueKey = $attributeParts[3]; return "The {$valueKey} value is required at array {$taxonomyIndex}"; } ]; }
核心逻辑
- 闭包接收的
$attribute参数是验证失败的完整属性路径,通过explode('.', $attribute)拆分后,能精准提取出taxonomies数组的索引和values的键名 - 按需求格式拼接字符串,即可生成自定义的错误消息
如果是在控制器中直接使用Validator门面,同样可以在消息配置中用闭包实现:
$validator = Validator::make($request->all(), [ // 你的验证规则 ], [ 'taxonomies.*.values.*.required' => function ($attribute, $value, $parameters) { $attributeParts = explode('.', $attribute); $taxonomyIndex = $attributeParts[1]; $valueKey = $attributeParts[3]; return "The {$valueKey} value is required at array {$taxonomyIndex}"; } ]);
内容的提问来源于stack exchange,提问作者Fidelis E Peter
相关产品推荐
相关产品推荐

