Laravelバリデーションで配列パラメータをバリデートする方法

Laravelのバリデーション機能を使用すると、配列パラメータを簡単にバリデートすることができます。

この記事では、執筆時の最新版であるLaravel10系における配列パラメータのバリデーション方法に焦点を当て、具体的なサンプルコードを交えて詳しく説明します。

配列パラメータのバリデーションの基本

まず、Laravelのバリデーションルールを使用して配列パラメータをバリデートする方法を見ていきましょう。

use Illuminate\Http\Request;

// コントローラーメソッド内での使用例
public function create(Request $request)
{
    $request->validate([
        'items' => 'required|array',
        'items.*' => 'required|string|max:255',
    ]);

    // バリデーションに成功した場合の処理
}

上記のコードでは、items という配列パラメータをバリデートしています。

items は必須であり、各要素は文字列であり、各要素の最大文字数は255文字までというバリデーションルールが適用されています。

以下のパラメータのようになります。

$input = [
    'items' => [
        '文字列',
        '最大文字数は255文字まで',
    ],
];

配列キーによるバリデーション

配列内にキーが設定されている場合のバリデーション方法のサンプル

use Illuminate\Support\Facades\Validator;
 
$input = [
    'user' => [
        'name' => 'Taylor Otwell',
        'username' => 'taylorotwell',
        'admin' => true,
    ],
];
 
Validator::make($input, [
    'user' => 'array:name,username',
    'user.name' => 'string',
    'user.username' => 'string',
]);

上記のサンプルでは array:name,username と有効なキーを指定する事ができます。そのため、 admin パラメータは無効な値として処理されます。

多次元配列のバリデーション

多次元配列、ネストされた配列でのバリデーションです

use Illuminate\Support\Facades\Validator;
 
$input = [
    'photos' => [
        [
            'name' => 'BeachVacation.jpg',
            'description' => 'A photo of my beach vacation!',
        ],
        [
            'name' => 'GrandCanyon.jpg',
            'description' => '',
        ],
    ],
];
 
Validator::validate($input, [
    'photos.*.description' => 'required',
], [
    'photos.*.description.required' => '写真 #:position の詳細は必須入力です',
]);

上記の例は失敗する例で、バリデーションエラーとしては「写真 #2 の詳細は必須入力です」と表示されます。

最後に

Laravelのバリデーション機能を使用すると、配列パラメータを簡単にバリデートすることができます。

この記事では、配列パラメータの基本的なバリデーション方法と配列キーや多次元配列のバリデーション方法について説明しました。

これ以外にも公式ドキュメントではより詳細な情報がまとまっているので確認してみてください

https://laravel.com/docs/10.x/validation#validating-arrays

これにより、Laravelを使用して柔軟で信頼性の高いバリデーションを実装することができます。

この他にもバリデーションを実務で使ってきた経験をまとめた記事もありますので、興味があればこちらも読んでみてください

投稿者


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA