如何更改laravel中验证错误的键

Posted

技术标签:

【中文标题】如何更改laravel中验证错误的键【英文标题】:how to change the key of validation error in laravel 【发布时间】:2020-05-11 13:02:34 【问题描述】:

我是 laravel 的新手,并且正在研究 api,我已经制作了一个 api,我在其中实现了验证。一切正常,但我被困在一件小事上。我想更改验证错误中的键名。例如对于“唯一”验证错误。这就是现在显示的内容

我想用“消息”(文本)重命名“电子邮件”(文本)键

我在Illumination/support/validation.php中尝试了很多东西

messagebag.php 文件,但如果它发生更改,则会显示“数据未定义”的错误。

我关注的链接是

https://stillat.com/blog/2018/04/21/laravel-5-message-bags-adding-messages-to-the-message-bag-with-add

https://laracasts.com/discuss/channels/laravel/custom-validation-message-for-array-using-different-key?page=0

Override laravel validation message

这是验证码

$validator = Validator::make($request->all(), [ 
      'first_name' => 'required',
      'last_name' => 'required',
      'email' => 'required|email|unique:users',
      'fcm_token' => 'required',
      'password' => 'required',  
      'c_password' => 'required|same:password' 
    ]); 

【问题讨论】:

您应该添加至少一个您尝试过的代码,以便人们可以在该代码上为您提供帮助,您的问题似乎是在让人们猜测您的代码和设置,并为您编写完整的代码。 为什么你“需要”这个?如果您有超过 1 个要验证的字段,它将无法正常工作。 @Qirel 我想重命名响应中的键。我不想验证两个字段。 @Dilek 如果您不清楚我的问题,请告诉我。我不要求任何脚本。我在问如何做到这一点。我在提供的链接中提到并给出的相同文件中尝试了相同的代码。我想用“消息”(文本)重命名“电子邮件”(文本)键 我不明白目的,索引是无效字段的名称——你为什么需要改变它?我的观点是,如果某一点超过 1 个字段,您将无法区分哪条消息属于哪个字段。 【参考方案1】:

在 Laravel 中,您可以尝试以这种方式验证您的电子邮件:

'email'=>'required|email'

【讨论】:

"我想用 "message" 替换 "email" 键" 如何将 email 更改为 message @kerbholz 编辑的问题我想用“消息”(文本)重命名“电子邮件”(文本)键 @dev:我知道,我就是这么说的。 Netwons 代码与此无关 @kerbholz 是的,你有什么想法吗?【参考方案2】:

您可以手动循环错误 MessageBag 并构造响应以替换键

    $validator = Validator::make($request->all(), [ 
      'first_name' => 'required',
      'last_name'  => 'required',
      'email'      => 'required|email|unique:users',
      'fcm_token'  => 'required',
      'password'   => 'required',  
      'c_password' => 'required|same:password' 
    ]);   

    $errors = [];
    foreach ($validator->errors()->messages() as $key => $value) 
        if($key == 'email')
            $key = 'message';
        $errors[$key] = is_array($value) ? implode(',', $value) : $value;
        //implode is for when you have multiple errors for a same key
        //like email should valid as well as unique
    

    $result = array("status" => count($errors)?0:1, 'data'=>$errors);
    return $result;

【讨论】:

当电子邮件字段为空时,程序无法访问该方法。它直接从验证异常中显示。我已经尝试过了。 哦,这意味着验证正在其他地方运行,但很难猜测可用信息的位置【参考方案3】:

在资源中 - lang - en (或任何语言) - validation.php

将此代码放在底部:

'attributes' => [
    'email' => 'The Email', 
],

【讨论】:

【参考方案4】:

如果我能很好地理解问题。这将帮助您:

a https://laravel.com/docs/7.x/validation#rule-unique

在你的情况下:

'email' => 'required|email|unique:users,message'

唯一:表、列、除外、idColumn

希望对你有帮助。

【讨论】:

【参考方案5】:

为了改变某个字段的错误信息的key,你可以将这个特定字段的验证从请求转移到控制器(或服务)。这样你就可以用任何你想要的名字抛出错误。

例如:

if (#your validation of the field failed#) 
  throw ValidationException::withMessages(['your_key' => 'your message']);

别忘了这一行:

use Illuminate\Validation\ValidationException;

现在的错误如下所示:


    "message": "The given data was invalid.",
    "errors": 
        "your_key": [
            "your message"
        ]

【讨论】:

以上是关于如何更改laravel中验证错误的键的主要内容,如果未能解决你的问题,请参考以下文章

是否可以更改 Laravel 的验证器回调中的错误消息?

Laravel - 更改身份验证用户的错误消息

Laravel 数组:密钥验证

向 Laravel 表单添加自定义验证错误

Laravel:如何更改默认登录错误消息:'这些凭据与我们的记录不匹配'

如何更改 laravel 中的用户模型以使用其他表进行身份验证而不是用户?