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

how to get an error key in laravel error message array

我正在尝试使用 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

这是因为,$errors->all() returns 一个数组中所有字段的所有错误的数组(数字索引)。

如果你想循环并得到每个 key => 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

这将帮助您在错误所属字段的 top/bottom 处显示每个错误。

使用

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

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

array(1) { [0]=> string(13) "Successfully!" }

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

遍历错误

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

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

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

$error->keys()

或错误列表:

$errors->all()

或特定错误的关键字:

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