如何在laravel错误消息数组中获取错误键

Posted

技术标签:

【中文标题】如何在laravel错误消息数组中获取错误键【英文标题】:how to get an error key in laravel error message array 【发布时间】:2017-01-25 21:41:56 【问题描述】:

我正在尝试使用 Laravel 错误转储 ($errors) 从数组中检索密钥。

数组长这样

ViewErrorBag #169 ▼
  #bags: array:1 [▼
    "default" => MessageBag #170 ▼
      #messages: array:2 [▼
        "name" => array:1 [▼
          0 => "The name field is required."
        ]
        "role_id" => array:1 [▼
          0 => "The role id field is required."
        ]
      ]
      #format: ":message"
    
  ]

使用@foreach 循环获取错误消息可以正常工作。

@foreach($errors->all() as $error)
     <li>$error</li>
@endforeach

但我想得到namerole_id。有没有办法做到这一点?到目前为止,我已经尝试了以下方法和其他一些方法,但没有成功。

@foreach ($errors->all() as $key => $value)
       Key:  $key 
       Value:  $value 
@endforeach

【问题讨论】:

【参考方案1】:

在 Laravel API 中有一个可用于 $error 消息包的方法列表: https://laravel.com/api/master/Illuminate/Contracts/Support/MessageBag.html

您可以通过以下方式获取所有错误键的列表:

$error->keys()

或错误列表:

$errors->all()

或者一个特定的错误通过它的键:

$error->get('your.key')

【讨论】:

【参考方案2】:

遍历错误

@foreach($errors->getMessages() as $key => $message)
$key = $message[0]
@endforeach

【讨论】:

【参考方案3】:

使用

@foreach($errors->getMessages() as $key => $error )
   Key:  $key 
   Value:  $error[0] 
@endforeach

如果你 var_dump $error 的值,你会得到一个数组:

array(1) [0]=&gt; string(13) "Successfully!"

因此您需要该数组的密钥(在我们的例子中为 0)来访问消息

【讨论】:

【参考方案4】:

这是因为,$errors-&gt;all() 返回一个数组,其中包含单个数组中所有字段的所有错误(数字索引)。

如果您想要循环并想要获取每个 key =&gt; value 对,那么您可以尝试这样的操作:

@foreach($errors->getMessages() as $key => $message)
    $key = $message
@endforeach

但是,您可能会从错误中显式获取项目,例如:

 $errors->first('name')  // The name field is required.

也许在您使用类似这样的方式询问字段的任何错误之前进行检查是明智的:

@if($errors->has('name'))
     $errors->first('name') 
@endif

这将帮助您在错误所属字段的顶部/底部显示每个错误。

【讨论】:

你好。谢谢回复。当我尝试第一种方法时出现此错误。 htmlspecialchars() 期望参数 1 是字符串,给定数组。第二个解决方案完美。但我仍然想知道如何获得该键值,因为我必须为表单中的每个输入提供第二个解决方案。等待回复。 没关系。我直接在标签 ID 上使用了 $key。我想尝试打印出 $key 是混乱的部分。非常感谢:D

以上是关于如何在laravel错误消息数组中获取错误键的主要内容,如果未能解决你的问题,请参考以下文章

Vuejs如何显示laravel输入数组验证错误

如何在 laravel 中输入所有数组并在字段下方显示验证错误

如何让 Laravel 返回 JSON REST API 的自定义错误

如何根据输入请求规则在 laravel 刀片中显示错误消息

如何从laravel中的数组中获取键名

如何在 laravel 表单验证错误消息中给出自定义字段名称