PHP
初心者
laravel
バリデーション

[Larabel] 2重にネストされたリクエストに対するバリデーション

環境

CentOS: 7.4
PHP: 7.2
Laravel: 5.6

例えばこんなパターン

一度に複数のユーザーが登録できる機能があった場合。

sample.html
<form>
    <ul>
        <li>
            <input type="text" name="users[][name]">
            <input type="text" name="users[][email]">
        </li>
        <li>
            <input type="text" name="users[][name]">
            <input type="text" name="users[][email]">
        </li>

        <!-- つづく -->

    </ul>
</form>

このリクエストの中身を見てみると user という配列の中に、さらに連想配列が入ったような形になっています。

$user = [
    ['name' => 'たなか', 'email' => 'tanaka@test.com'],
    ['name' => 'すずき', 'email' => 'suzuki@test.com'],
    // つづく
]

このようなリクエストを Laravel でバリデーションするときは「ドット記法」を利用します。

UserController.php
$request->varidate(
    'users.*.name' => 'required|string',
    'users.*.email' => 'required|email',
);

users.* と書くと、users に含まれるすべての配列に対してバリデーションを行うことになります。

今回は users 内の連想配列に対してバリデーションを行いたいので、users.* にもう1つドットをつなげて users.*.name などとします。