0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【BLOCS】テーブルタイプの入力画面を作る

Last updated at Posted at 2024-07-14

テーブルタイプの入力画面

複数件のレコードを一度に入力できる画面を、テーブルタイプの入力画面と呼びます。大量のデータを一度に入力したい時に便利です。

テンプレートを作る

まず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初学者や、プログラムに苦手意識のある方に特にオススメです。最後まで読んでいただき、ありがとうございました!

関連サイト

  1. サービスサイト
  2. GitHub
  3. Packagist
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?