質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Q&A

1回答

1608閲覧

Laravel8でのバリデーションエラーメッセージのオーバーライドができません。

o0039

総合スコア3

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

0グッド

0クリップ

投稿2021/11/24 07:09

編集2022/01/12 10:55

前提・実現したいこと

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を読み込んでいます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

skys215

2021/11/24 07:40

```php public function store(Request $request){ dd($request); ``` 一旦普通のRequestにして、データを取得して見ましょう。 データはphp側に来てないと思います。
m.ts10806

2021/11/24 07:43

htmlをもう少し全体提示してください。 せめてformタグは入れてほしい
o0039

2021/12/01 06:10

ご返信ありがとうございます。 skys215様 dd($request);で取得してみましたが、 +files: Symfony\Component\HttpFoundation\FileBag {#48 ▼ #parameters: array:1 [▼ "project_image" => Symfony\Component\HttpFoundation\File\UploadedFile {#33 ▼ にて取得されているようでした。ファイルのバリデーションは特殊なのでしょうか m.ts10806様 申し訳ありません。 質問の内容を修正いたします。
skys215

2021/12/01 13:52

アップロードしたファイルの大きさは?MBですか。 ちなみにphp.ini のupload_max_filesize、post_max_size;nginxだとclient_max_body_size、ApacheであればLimitRequestBodyはどのくらいに設定してあるのでしょうか? 調べた上えファイルが大きいからかもしれないです。小さいファイルをアップロードしてみたでしょうか?
o0039

2021/12/08 05:10

skys215様 遅くなり申し訳ありません。 アップロードしたファイルの大きさですが、2.2Mになります。post_max_sizeですが32Mで設定しております。 2M以下の場合は問題なくアップデートができ、意図した動きになるのですが、2M以上の場合、バリデーション にて、「ファイルサイズは2MB以内にしてください。」を表示させたいのですが、「プロジェクト画像のアップロードに失敗しました。」と表示され意図した動きになり困っております。
guest

回答1

0

ネットで捜索しました。Laravel#19208
アップロードしたファイルがphpの設定より大きと、uploadのバリデーションを使うことになります。
phpの設定を大きくすればproject_image.maxバリデーションは使えるようになります。

投稿2021/12/08 16:35

skys215

総合スコア910

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

o0039

2021/12/12 08:26

skys215様 ご回答ありがとうございます。 ファイルサイズが2.2 MB、upload_max_filesize = 32M、max_file_uploads = 20、post_max_size = 10Mになっています。 phpの設定では、ファイルサイズより大きいのですが、project_image.maxバリデーションが使用できません。 ご教示いただけますと幸いです。
skys215

2021/12/12 11:35

設定を変えた後、apache/nginxは再起動しましたか?
o0039

2021/12/22 07:30

返信遅くなり申し訳ございません。 再起動しましたが、やはり替わらないようです。 よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問