テーブルタイプの入力画面
複数件のレコードを一度に入力できる画面を、テーブルタイプの入力画面と呼びます。大量のデータを一度に入力したい時に便利です。
テンプレートを作る
まず1件の入力画面のテンプレートを作ります。次に data-loop
で入力フォームを複数件にして、テーブルタイプの入力画面にします。
create.blocs.html
<tbody data-loop=$books>
<tr>
<th>
<label for="name">名前</label> *
</th>
<td>
<input type='text' class='form-control' value='' id="name" name="name" />
</td>
</tr>
バリデーションは、ワイルドカードで項目を指定します。
<!-- !books.*.name='required' data-lang='入力してください' -->
<!-- !books.*.name='required_with:books.*.price' data-lang='価格を入力してください' -->
入力値は配列になるので、エラー表示には添字は $loop->index
の指定が必要です。
create.blocs.html
<tbody data-loop=$books>
<tr>
<th>
<label for="name">名前</label> *
</th>
<td>
<input type='text' class='form-control' value='' id="name" name="name" required />
<!-- !books.*.name='required' data-lang='入力してください' -->
@error('books.'.$loop->index.'.name') <div class='text-danger'>{{ $message }}</div> @enderror
</td>
</tr>
コントローラーで初期データを作る
コントローラーで初期データを作らないと入力フォームが表示されません。このように指定すると、初期状態で2件の入力フォームを表示します。
app\Http\Requests\BookRequest.php
protected function prepareCreate()
{
old('books') || $this->val['books'] = [[], []];
}
まとめ
今回は、テーブルタイプの入力画面を作りました。プログラマーの労力を減らせる工夫を色々と取り入れてBLOCSを開発しています。PHP初学者や、プログラムに苦手意識のある方に特にオススメです。最後まで読んでいただき、ありがとうございました!