複数画像のバリデーション
解決したいこと
Laravel6でレシピ投稿アプリを作成しています。
料理の手順を説明するための画像を複数投稿できる仕様になっており、それぞれに入力必須のバリデーションをかけたいです。
発生している問題
inputのname属性が配列となっており、ドット記法を用いてすべての配列を指定できるという認識でバリデーションを設定しましたが機能しませんでした。
以下コードになります。
FormRequestファイル
CreateRecipe.php
public function rules()
{
return [
'upload_image.cooking_image.*' => 'required|image|mimes:jpeg,png,jpg',
];
}
bladeファイル
create.php
<input type="file" name="upload_image[cooking_image][]" class="howto-image" style="display:none" accept="image/*">
※JavaScriptで動的にフォーム入力欄が追加できる仕様となっております。
自分で試したこと
rules内のname属性を以下に変えてみると挙動が変わりました。
'upload_image.cooking_image.*' // バリデーションが機能せず素通りしてしまう。
'upload_image.cooking_image' // 画像をアップロードしてもファイルを要求され、バリデーションがかかってしまう。
'upload_image.*' // 同上
'upload_image' // 同上
しかし、それぞれの画像ファイル選択欄にバリデーションをかけることができませんでした。
実現したいこと
// JavaScriptで動的に追加したフォーム入力欄それぞれに、以下のようなバリデーションをかけたいです。
upload_image[cooking_image][0] →画像選択必須
upload_image[cooking_image][1] →画像選択必須
upload_image[cooking_image][2] →画像選択必須
upload_image[cooking_image][3] →画像選択必須
⁝
よろしくお願い致します。
2022/9/23 追記
name属性の配列で自動で割り振られる連番の部分を指定するとバリデーションをかけることができました。
しかし、「.*」で動的に追加されたフォーム欄すべてにバリデーションをかけることができません。
FormRequestファイル
CreateRecipe.php
public function rules()
{
return [
'upload_image.cooking_image.0' => 'required|image|mimes:jpeg,png,jpg',
'upload_image.cooking_image.1' => 'required|image|mimes:jpeg,png,jpg',
'upload_image.cooking_image.2' => 'required|image|mimes:jpeg,png,jpg',
];
}
// 上記のようにname属性を個別に指定するとバリデーションをかけることができます。
// しかし、『'upload_image.cooking_image.*'』と配列のすべてを指定するとバリデーションが機能しません。
0