如何自定义 laravel 数组验证错误键和消息

Posted

技术标签:

【中文标题】如何自定义 laravel 数组验证错误键和消息【英文标题】:How to customize laravel array validation error keys and message 【发布时间】:2020-06-20 03:19:02 【问题描述】:

我在我的应用程序中使用FormRequest 来验证数据。

示例代码:

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class UserRequest extends FormRequest

    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    
        return true;
    

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    
        return [
            'skills' => "required|array",
            "skills.*" => "required|min:2|max:20"
        ];
    

这里默认当我通过请求这个示例数据时:


    "skills" => [
        "a",
        "apple"
    ]

然后得到错误信息:


    "errors": 
        "skills.0": [
            "The skills.0 must be at least 2 characters."
        ],

        "skills.1": [
            "The skills.1 may not be greater than 4 characters."
        ]
    

如何自定义此验证错误消息并在结果中得到类似这样的错误:


    "errors": 
        "skills": [
            "The skills with key 0 must be at least 2 characters.",
            "The skills with key 1 may not be greater than 4 characters."
        ]
    

【问题讨论】:

laravel.com/docs/7.x/validation#customizing-the-error-messages 我如何自定义(重命名)或删除错误键? @kerbholz 目前,我相信没有干净的解决方案可以获取嵌套数组错误消息,就像您正在寻找的那样。您需要覆盖 FormRequest::class 上的某些方法才能获得此行为。也没有一种干净的方法来检索数组中每个错误的索引来定义您的消息。 对于 API 错误响应类似这样的错误键 (skills.0, skills.1, skills.18) 是干净的解决方案吗? @RobertKujawa @AndreasHunter,这就是 Laravel 开箱即用的处理方式,但对最终用户来说并不是很好,我不确定你是如何在前端显示错误的,但是如果您在每个输入控件下方执行此操作,我通常只需更改数组的属性名称,以便最终用户看起来不错。您可以通过在FormRequest 上定义一个属性函数来做到这一点。 public function attributes() return ['skills.*' =&gt; 'skill']; 这样您的错误消息将如下所示:"skills.0": ["The skill field must be at least 2 characters."] 【参考方案1】:

使用 Laravel form request 验证。表单请求是包含验证逻辑的自定义请求类。

【讨论】:

【参考方案2】:

您可以在表单请求中使用 messages() 方法自定义验证消息

/**
 * Get the error messages for the defined validation rules.
 *
 * @return array
 */
public function messages()

    return [
        'title.required' => 'A title is required',
        'body.required' => 'A message is required',
    ];

【讨论】:

以上是关于如何自定义 laravel 数组验证错误键和消息的主要内容,如果未能解决你的问题,请参考以下文章

如何将自定义验证消息传递给 laravel 中的 cviebrock/image-validator?

Laravel 5.3 自定义验证消息数组

自定义 Laravel 验证规则示例

Laravel 验证规则的自定义错误消息:维度

Laravel - 多个字段的相同自定义错误消息

Laravel 5.4 - 如何为同一个自定义验证规则使用多个错误消息