質問: laravelの条件節の分け方の勉強をしており、例で`@if($error->has('xxx'))`とよく見るのですが、このxxxは何を示しているのですか? 当たり前のようにでてくるのできっと常識なのだと思いますが、答えが見つけられせん。 お心当たりある方はご教授いただけますと幸いです。 追記 分かりにくいようでしたので具体例上げます。 以下を参照していました。 Laravelのバリデーションにはフォームリクエストを使おう - Qiita ``` /** 特定のエラーの表示 */ @if($errors->has('username')) {{ $errors->first('username') }} @endif ``` 1. 例えばここの'username'は何を示しているんでしょうか? 2. $errorsの中の入力内容userみたいな感じかと思ったのですが、そもそも$errorsの中身は? 3. firstというのもどこからきたのでしょう?secondやthirdも存在するのでしょうか?
回答: まずは公式のドキュメントやその日本語訳などを参照されることをお勧めします。 さて、ここでいう`$error`は単にエラーいうよりバリデーションの結果ですね。 たとえば参照されている記事にある ``` [ 'username' => 'required|max:20', 'email' => 'required|email|max:100', 'password' => 'required|min:6|confirmed', ]; ``` というバリデーションルールを考えてみます。 1. ここで質問中のxxxに入りうるのは`username`, `email`, `password`のいずれかです。基本的にはバリデーションルールのキーと思ってください。 2. `$errors`の実態は`Illuminate\Support\MessageBag`です。これは各キーに対応するメッセージを内部的に**配列で**持っています。 1. `has` はこの中身が**1つ以上存在する**場合にtrueを返します 2. `first` は配列の先頭の値を返します バリデーションなのでメッセージは複数存在する場合があるわけです。複数表示しても邪魔なので先頭だけ表示することはよくあります。(この順番がバリデーションルール指定順だったかは忘れましたが) `first`の代わりに`get`を使用するとこれを配列ですべて取得できます。 全フィールドの全エラーメッセージ取得をご覧ください。 3. 蛇足ですが「要素が一つ以上存在する」配列のようなオブジェクトにおいて先頭の値は使用機会が比較的多くなります。1つだけの結果を返すクエリなんかもそうです。そのためLaravelではコレクションのようなクラスではその先頭を得るための`first`が用意されていることがしばしばあります。 (確認せずに書いているので一部誤りがある気がします)