質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Q&A

解決済

3回答

485閲覧

配列のバリデーションを一つ一つに割り当てたい

YuusukeArtRoom

総合スコア23

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

0グッド

0クリップ

投稿2021/09/22 07:33

編集2021/09/22 07:36

request

1 public function rules() 2 { 3 return [ 4 // 5 'examplan_title' => ['required'], 6 'points.*' => ['required'] 7 ]; 8 } 9 10 11 public function messages() 12 { 13 return[ 14 'examplan_title.required' => '*必ず選択してください', 15 'points.*.required' => '*必須', 16 ]; 17 }

blade

1@foreach ($students as $student) 2 <tr> 3 <th> 4 <span class="number">出席番号:{{ $student['studentnumber'] }}</span> 5 <input name="studentinfos_studentnumber[{{ $student['studentnumber'] }}]" type="hidden" value="{{ $student['studentnumber'] }}"> 6 <span class="name">氏名:{{ $student['studentname'] }}</span> 7 <input name="studentinfos_studentname[{{ $student['studentnumber'] }}]" type="hidden" value="{{ $student['studentname'] }}"> 8 </th> 9 <td> 10 <input name="points[{{ $student['studentnumber'] }}]" type="text" placeholder="例:95" value="{{ old('points.*')}}"> 11 <span class="errrormessage"> 12 @if ($errors->has('points.*')) 13 {{ $errors->first('points.*')}} 14 @endif 15 </span> 16 </td> 17 </tr> 18@endforeach

foreachで得点を入力できるようにしていますが、バリデーションのところで一つでも未入力があると全てにエラーメッセージが出てしまいます。何かヒントがあればご教授ください。
イメージ説明
⬇︎⬇︎⬇︎⬇︎⬇︎⬇︎⬇︎⬇︎⬇︎⬇︎⬇︎⬇︎⬇︎⬇︎⬇︎⬇︎⬇︎⬇︎⬇︎⬇︎⬇︎⬇︎⬇︎⬇︎⬇︎⬇︎⬇︎⬇︎⬇︎⬇︎
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

@if ($errors->has('points.*')) {{ $errors->first('points.*')}} @endif

上記のコードですとinput name=points[xxx]すべての中でエラーを探し、最初のものを表示というコードになってしまっています。

それぞれにstudentnumberで番号をつけているようですので、次のようにしてみてはどうでしょうか。

@foreach ($students as $student) <tr> <th> <span class="number">出席番号:{{ $student['studentnumber'] }}</span> <input name="studentinfos_studentnumber[{{ $student['studentnumber'] }}]" type="hidden" value="{{ $student['studentnumber'] }}"> <span class="name">氏名:{{ $student['studentname'] }}</span> <input name="studentinfos_studentname[{{ $student['studentnumber'] }}]" type="hidden" value="{{ $student['studentname'] }}"> </th> <td> <input name="points[{{ $student['studentnumber'] }}]" type="text" placeholder="例:95" value="{{ old('points.'.$student['studentnumber'])}}"> <span class="errrormessage"> @if ($errors->has('points.'.$student['studentnumber'])) {{ $errors->first('points.'.$student['studentnumber'])}} @endif </span> </td> </tr> @endforeach

投稿2021/09/23 00:23

Eggpan

総合スコア2810

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YuusukeArtRoom

2021/09/23 02:26

うまく動作しました。ありがとうございます。 今回の問題点を明らかにした上で回答をシェアさせていただきます。 しばらくお待ちください。
guest

0

eggpanさんの回答コードが全てなので、こちらでは問題の所在を明らかにして抽象化したものを載せます。

「.」で配列の全てを取得と言うことですが、今回みたいにその中でも各指定番号のものだけを割り振るためには、old('points.')のよう('')の中には指定の{{ $student['studentnumber'] }}を記述するとエラーになってしまいます。
そこでeggpanさんの回答にあるように('')の中の''で一度区切ってその後に指定のコードを記述することがで、解決できました。

('ここ[''の内側]には変数は利用できない').ここで一度区切ってドット「.」をつけた上で変数を利用する
基本中の基本だとは思いますが見落としていた部分だったので、学べてよかったです。ありがとうございました。

投稿2021/09/23 02:46

YuusukeArtRoom

総合スコア23

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

検証していないので、合っているか分かりませんが。

bladeで、point.*ではなくpoint.1のように配列番号(出席番号?)を指定するようにすればいいのではないでしょうか。
points[{{ $student['studentnumber'] }}]と設定しているので。

投稿2021/09/22 11:34

meshi_s

総合スコア276

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YuusukeArtRoom

2021/09/22 11:45

配列番号ではうまくいかないですね。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問