前提・実現したいこと
o0039と申します。
Laravel8でカスタマイズされたバリデーションエラーメッセージを吐き出したいので、
public function messages()にて設定したのですが、
なぜか
<input type="file" accept="image/png,image/jpeg,image/jpg,image/gif" name="project_image" id="user_img">
で指定した画像ファイルのみオーバーライドされず、「アップロードに失敗しました。」と表示され意図した動きになりません。
私が考えているメッセージは、
拡張子が違う場合は、「指定された拡張子(jpg/jpeg/gif/png)ではありません。」
ファイルサイズは2MB以上の場合「ファイルサイズは2MB以内にしてください。」
と表示してほしいのですが、全て「アップロードに失敗しました。」と表示されます。
他の名前や、詳細情報などは、意図した表示となります。アップロード画像のみ意図した動きとなりません。
ご教示いただけますと幸いです。
よろしくお願いします。
発生している問題・エラーメッセージ
プロジェクト画像のアップロードに失敗しました。 ←画像のみ意図したメッセージと違います。 プロジェクト名は必須です。 プロジェクト詳細は必須です。 対象ユーザーは必須です。
該当のソースコード
useで読み込んで、storeに型を設定しています。 use App\Http\Requests\StoreProjectRequest; public function store(StoreProjectRequest $request){ ... }
<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class StoreProjectRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'project_image' => 'image|max:2048|mimes:jpg,jpeg,gif,png', 'project_name' => 'required|string|max:255', 'introduction' => 'required|string|max:255', 'user_id' => 'required', ]; } /** * バリデーションエラーメッセージ * * @return array */ public function messages() { return [ 'project_image.mimes' => '指定された拡張子(jpg/jpeg/gif/png)ではありません。', 'project_image.max' => 'ファイルサイズは2MB以内にしてください。', 'project_name.required' => 'プロジェクト名は必須です。', 'project_name.string' => 'プロジェクト名が不正です。', 'project_name.max' => 'プロジェクト名は255文字以内にしてください。', 'introduction.required' => 'プロジェクト詳細は必須です。', 'project_name.string' => 'プロジェクト詳細が不正です。', 'project_name.max' => 'プロジェクト詳細は255文字以内にしてください。', 'user_id.required' => '対象ユーザーは必須です。', ]; } }
<div class="contentArea"> <div class="contentArea__header flex items-center justify-between p-5"> <p>新規プロジェクト作成</p> </div> <div class="contentArea__userInfo"> <x-auth-validation-errors class="mb-4" :errors="$errors" /> <form method="post" action="{{ route('admin.projects.store') }}" enctype="multipart/form-data" class="contentArea__userInfo__form"> @csrf <dl class="contentArea__userInfo__edit"> <dt>プロジェクト画像</dt> <dd> <div class="flex items-center"> <div class="flex items-center justify-between"> <div class="bg-gray-400 rounded-full w-14 h-14 relative"> <label class="contentArea__mv__userImg__input z-0"> <input type="file" accept="image/png,image/jpeg,image/jpg,image/gif" name="project_image" id="user_img"> </label> </div> </div> <p class="contentArea__mv__userImg__text">プロジェクト画像</p> </div> </dd> </dl> <dl class="contentArea__userInfo__edit"> <dt>プロジェクト名</dt> <dd><input type="text" name="project_name" value="{{ old('project_name') }}"></dd> </dl> ・・・
@props(['errors']) @if ($errors->any()) <div {{ $attributes }}> <div class="font-medium text-red-600"> {{ __('Whoops! Something went wrong.') }} </div> <ul class="mt-3 list-disc list-inside text-sm text-red-600"> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif
試したこと
htmlのnameを変更したり、project_imageを外したりしましたが、解決できませんでした。
補足情報(FW/ツールのバージョンなど)
Laravel8を使用してます。
resources/lang/jaを読み込んでいます。