Laravel 4中$错误的结构

Enr*_*ent 1 php laravel laravel-4

在Laravel 4中,每次请求时都有一个变量$errors来显示请求中发生的错误.IT有这样的结构:

object(Illuminate\Support\MessageBag)#120 (2) {
  ["messages":protected]=>
  array(1) {
    ["email"]=>
    array(1) {
      [0]=>
      string(40) "The email must be a valid email address."
    }
  }
  ["format":protected]=>
  string(8) ":message"
}
Run Code Online (Sandbox Code Playgroud)

我想我可以将此代码放在我的应用程序的标题上,以便向用户提供输出,列出所有相关消息,如下所示:

@if (count($errors->messages))
    <div class="error-box">
        <ul>
            @foreach ($errors->messages as $error)
                <li>{{{ $error }}}</li>
            @endforeach
        </ul>
    </div>
@endif
Run Code Online (Sandbox Code Playgroud)

但显然我无法访问这样的消息.

有人可以解释一下我的结构MessageBar $errors,更重要的是,如何循环显示所有错误信息,以显示它们?

Unn*_*wut 7

你不能$errors->messages直接做,因为Illuminate\Support\MessageBag它的消息属性为["messages":protected].

你需要做的是这样使用all():

@foreach ($errors->all() as $error)
     <li>{{{ $error }}}</li>
@endforeach
Run Code Online (Sandbox Code Playgroud)

或事实上,因为MessageBag也可以表现为一个数组,你可以做count(),并foreach在其上直接,如:

@if (count($errors)) // or $errors->count()
    <div class="error-box">
        <ul>
            @foreach ($errors as $error)
                <li>{{{ $error }}}</li>
            @endforeach
        </ul>
    </div>
@endif
Run Code Online (Sandbox Code Playgroud)

您还可以在以下位置查看可以使用Laravel的MessageBag执行的完整方法列表:

  • Laravel 4.1:http://laravel.com/api/4.1/Illuminate/Support/MessageBag.html
  • Laravel 4.2:http://laravel.com/api/4.2/Illuminate/Support/MessageBag.html