当前位置: 首页 > 知识库问答 >
问题:

验证器-返回所有错误消息

沈俊明
2023-03-14

目前,Laravel中的验证器似乎只为每个字段返回一条错误消息,尽管该字段可能有多条规则和消息。(注意:我当前正在将一个空数组作为$data传递给Validator::make)

我试图做的是构建一个包含每个字段的规则和消息的数组,这些规则和消息可能会被重新用于前端验证。大概是这样的:

{
    "name": {
        "required": [
            "The name field is required."
        ],
        "max:255": [
            "The name field may not be greater than 255."
        ]
    },
    "email": {
        "required": [
            "The email field is required."
        ],
        "email": [
            "The email field must be a valid email address."
        ],
        "max:255": [
            "The email field may not be greater than 255."
        ]
    }
}

照明\验证\验证器中的getMessage方法看起来像是让我接近能够自己构建一些东西,但是它是一个受保护的方法。

有人知道一种让验证器实例输出所有规则和消息的方法吗?

共有1个答案

谢灵均
2023-03-14

目前Laravel中的Validator似乎每个字段只返回一条错误消息,尽管该字段可能具有多个规则和消息。

一旦单个验证规则失败,给定字段的验证就会停止。这就是为什么每个字段只有一个错误消息。

对于像您提供的示例中那样获取验证消息,Laravel的validator不提供这样的选项,但是您可以通过扩展validator类轻松实现这一点。

首先,创建新类:

<?php namespace Your\Namespace;

use Illuminate\Validation\Validator as BaseValidator;

class Validator extends BaseValidator {
  public function getValidationMessages() {
    $messages = [];
    foreach ($this->rules as $attribute => $rules) {
      foreach ($rules as $rule) {
        $messages[$attribute][$rule] = $this->getMessage($attribute, $rule);
      }
    } 

    return $messages;
  }
}

如您所见,输出与您的示例有点不同。没有必要返回给定属性和规则的消息数组,因为数组中总是只有一条消息,所以我只是在那里存储一个字符串。

其次,您需要确保使用了验证器类。为了实现这一点,您需要使用Validator facade注册自己的验证器解析器:

Validator::resolver(function($translator, array $data, array $rules, array $messages, array $customAttributes) {
  return new \Your\Namespace\Validator($translator, $data, $rules, $messages, $customAttributes);
});

可以在AppServiceProvider::boot()方法中执行此操作。

现在,为了获取给定验证器的验证消息,您只需要调用:

Validator::make($data, $rules)->getValidationMessages();

请记住,这段代码还没有经过测试。如果你看到代码有任何问题或错别字,请告诉我,我很乐意为你工作。

 类似资料:
  • 对于错误的响应,是否可能在响应中返回验证注释消息?我认为这是可能的,但我注意到我们的项目没有给出详细的不良请求信息。 如果请求缺少IDField,我希望返回“IDField is required”。我用的是泽西2.0。我看到的回应是...

  • 我尝试使用spring boot 2.2和thymeleaf进行表单验证,如文档示例所示(https://spring.io/guides/gs/validating-form-input/)但当提交错误的值时,我有一个白色标签错误页面,而我应该在表单视图中绑定这些错误。如何解决这个问题? 我的控制器操作代码: 和视图: 堆栈跟踪是: Whiteblabel错误页面为: 典型情况下,name字段的

  • 我是Spring Security的新手,我做了以下教程:https://windoctor7.github.io/spring-jwt.html 但是我修改了一些数据库中搜索用户的代码,所以,我创建了一个@bean: 1部分,拦截呼叫。 我拦截“登录”并在数据库中搜索用户是否存在: } 用户是正确的,最后一行: 我在AbstractAuthenticationProcessingFilter中遇

  • 在try/catch块中有三个sql查询。Autocommit是关闭的,并且所有三个查询都没有错误地运行,我已经验证了这一点(如果任何查询失败,它应该不会到达commit行,但是我已经通过xdebug验证了它,一次单步执行代码一行)。当代码到达commit()函数调用时,mysqli返回false,但没有错误消息。当前面的查询都工作时,提交怎么会失败呢? 代码基本上是这样的:

  • 我一直在尝试使用Laravel Passport,但我收到了错误{“error”:“invalid_client”,“message”:“client authentication failed”}。我已经在这个Android和Laravel项目中使用了它,但是当我在数据库中看到正确的数据时,我可以正确地注册用户。然后,当Android应用程序尝试获取访问令牌时,它会崩溃,因为服务器返回了以前的错

  • 我有一个简单的登录模型类,几乎没有数据注释验证 View是一个部分View,如下所示: 我相信我已经做了验证消息显示所需的所有事情,但它没有,客户端验证也没有。在母版页的头部区域,我还包括了以下脚本 是什么导致了这个问题?解决办法是什么?

  • 我利用最后几天在Clojure和ClojureScript中深入挖掘了Clojure.spec。 到目前为止,我发现在依赖某种格式的数据的公共函数中,在和中使用规范作为警卫是非常有用的。 有没有人知道如何在或防护中获得更好的错误消息? 我知道和,但这对那些或警卫没有帮助。

  • 问题内容: 以下是我从GoLang获得的MongoDB连接拨号。但是它返回一个紧急消息“ SASL身份验证步骤服务器返回错误:身份验证失败。 ”。我的用户名,密码,hostAddrs和dbName是正确的。我在这里想念什么? 问题答案: 我遇到类似的错误并添加了参数,并且在我们连接到远程MongoDB时可以正常工作 在您的代码中使用以下类似格式: