【问题标题】:how to get an error key in laravel error message array如何在laravel错误消息数组中获取错误键
【发布时间】: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

【问题讨论】:

    标签: php arrays laravel laravel-5.3


    【解决方案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
          猜你喜欢
          • 2020-02-13
          • 2020-06-20
          • 2016-05-27
          • 2021-10-02
          • 2013-02-07
          • 1970-01-01
          • 2020-10-06
          • 1970-01-01
          • 2015-12-21
          相关资源
          最近更新 更多