ユーザ用ツール

サイト用ツール


サイドバー

プログラム言語:php:laravel:バリデーション:withvalidatorを使ったバリデーションの追加:配列の画像を1件はアップロードを必須にしたい場合

【Laravel】配列の画像を1件はアップロードを必須にしたい場合

画像と名前などがセットとなって、配列で複数送られて来る場合。

// イメージ
$_POST['img'] = [
    0 => [
        'name' => 'あいうえお',
        'file' => 画像ファイルデータ_0
    ],
    1 => [
        'name' => 'かきくけこ',
        'file' => 画像ファイルデータ_1
    ],
];

最低1枚は画像が選択されているように、バリデーションを行いたくても、以下の指定では名前だけ入力されていた場合、必須チェックをスルーしてしまいます。

        return [
            'img'          => 'required:array',
        ],

その場合、以下のように withValidator を使うことで解決できました。

    public function rules()
    {
        return [
            'img.*.name'   => [
                'required_with:img.*.file',
                'string',
                'max:50',
            ],
            'img.*.file'   => [
                'file',
                'image',
                'mimes:jpeg,jpg,png,gif',
                'max_mb:10',
            ],
        ];
    }

    public function withValidator($validator) {
        $validator->after(function ($validator) {
            $file_count = 0;

            foreach ($this->file('img') as $key => $img) {
                if (isset($img['file']) && is_uploaded_file($img['file'])) {
                    $file_count ++;
                }
            }

            if ($file_count === 0) {
                $validator->errors()->add('img', '画像は必須です。');
            }
        });
    }

コメント

コメントを入力. Wiki文法が有効です:
 
プログラム言語/php/laravel/バリデーション/withvalidatorを使ったバリデーションの追加/配列の画像を1件はアップロードを必須にしたい場合.txt · 最終更新: 2021/12/16 11:31 by humolife