🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Laravel

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

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

Q&A

解決済

1回答

4438閲覧

laravelのバリデーション時にエラー

k3114

総合スコア6

Laravel

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

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

0グッド

1クリップ

投稿2019/12/12 05:07

編集2019/12/12 05:36

##発生しているエラー・問題
画像投稿時に以下のエラーが発生

Illuminate\Validation\Validator::validateO}moeble does not exist.

現在状況

バリデーションの設定を行い、nullでも通るようにするためフォームリクエストを作成したが
画像投稿時にエラーが発生してしまう。(nullの場合は正常に通過)
また、(LostRequest $request) を(Request $request)に戻した際は正常に通過できる

##現在のコード

controller

1public function upload(LostRequest $request) { 2 3 $lost = new Lost; 4 $lost->user_id = $request->user()->id; 5 $lost->pref = $request->pref; 6 $lost->seed = $request->seed; 7 $lost->image = empty($request->image) !== false ? '' :$request->image->getClientOriginalName(); // アップロードされたファイル名のままテーブルに保存 8 $lost->body = $request->body; 9 $lost->save(); 10 11 12 //画像がなければ下記処理のスキップ 13 if (empty($request->image) == false) { 14 if ($request->file('image')->isValid([])) { 15 $file_name = $request->file('image')->getClientOriginalName(); // アップロードされたファイル名の取得 16 $path = $request->image->storeAs('public',$file_name); 17 return view('home')->with('filename', basename($path)); 18 } else { 19 return redirect() 20 ->back() 21 ->withInput() 22 ->withErrors(); 23 } 24 } 25 return view('home'); 26 }

LostRequest

1<?php 2 3namespace App\Http\Requests; 4 5use Illuminate\Foundation\Http\FormRequest; 6 7class LostRequest extends FormRequest 8{ 9 /** 10 * Determine if the user is authorized to make this request. 11 * 12 * @return bool 13 */ 14 public function authorize() 15 { 16 return true; 17 } 18 19 /** 20 * Get the validation rules that apply to the request. 21 * 22 * @return array 23 */ 24 public function rules() 25 { 26 return [ 27 'seed' => 'required', 28 'pref' => 'required', 29 'image' => 'nullable|file|image|mime:jpg,jpeg,png', 30 'body' => 'nullable', 31 ]; 32 } 33} 34

form

1<form action="/size" method="POST" enctype="multipart/form-data"> 2 3 <!-- アップロードした画像。なければ表示しない --> 4 @isset ($filename) 5 <div> 6 <img src="{{ asset('storage/' . $filename) }}"> 7 </div> 8 @endisset 9 10 <div class='select_seed'> 11 @yield('seed_list') 12 </div> 13 <div class='form-data'> 14 <div class="pref"> 15 16 17 </div> 18 </div> 19 20 <div class='form_datas'> 21 <h2>写真/詳細を投稿する</h2> 22 <label><input name='image' class='hidden' type="file" id="selfile"><br><div class='preview' id="bg"> 23 <h2 class='imagearea_message'>クリックして画像を投稿</h2> 24 </div></label> 25 <textarea class='comment_area' name="body" rows="8.5" cols="54" placeholder='&#13;&#10;*コメントを入力してください。&#13;&#10;特徴/首輪の有無等'></textarea> 26 </div> 27 </div> 28 {{ csrf_field() }} 29 @if (count($errors) > 0) 30 <div> 31 <ul> 32 @foreach ($errors->all() as $error) 33 <li>{{ $error }}</li> 34 @endforeach 35 </ul> 36 </div> 37 @endif 38 <div class='submit_area'> 39 <input class='submit_button' type=submit value='クリックして情報を保存'> 40 </div> 41 </form>

イメージ説明

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/12/12 05:16

formが記述されているblade のコードを提示してください。
k3114

2019/12/12 05:25

引き続きご回答ありがとうございます。 追記させていただきました。form内の<div class="pref">ないは都道府県の選択になりますがコード量が多いので省略させていただいております
guest

回答1

0

ベストアンサー

php

1public function upload(LostRequest $request) { 2 3 $lost = new Lost; 4 $lost->user_id = $request->user()->id; 5 $lost->pref = $request->pref; 6 $lost->seed = $request->seed; 7 $lost->image = empty($request->image) !== false ? '' :$request->image->getClientOriginalName(); // アップロードされたファイル名のままテーブルに保存 8 $lost->body = $request->body; 9 $lost->save(); 10 11// コメントアウトもしくはここを削除 12// $this->validate($request, [ 13// 'image' => [ 14// // アップロードされたファイルであること 15// 'file', 16// // 画像ファイルであること 17// 'image', 18// // MIMEタイプを指定 19// 'mimes:jpeg,png', 20// ] 21// ]); 22 23 //画像がなければ下記処理のスキップ 24 if (empty($request->image) == false) { 25 if ($request->file('image')->isValid([])) { 26 $file_name = $request->file('image')->getClientOriginalName(); // アップロードされたファイル名の取得 27 $path = $request->image->storeAs('public',$file_name); 28 return view('home')->with('filename', basename($path)); 29 } else { 30 return redirect() 31 ->back() 32 ->withInput() 33 ->withErrors(); 34 } 35 } 36 return view('home'); 37 }

コントローラーに書いていたバリデーションを FormRequest にまとめて記述する。
分散しちゃうとメンテナンス性を損ねるし、それぞれが独立してエラーを出してしまいます。

php

1<?php 2 3namespace App\Http\Requests; 4 5use Illuminate\Foundation\Http\FormRequest; 6 7class LostRequest extends FormRequest 8{ 9 /** 10 * Determine if the user is authorized to make this request. 11 * 12 * @return bool 13 */ 14 public function authorize() 15 { 16 return true; 17 } 18 19 /** 20 * Get the validation rules that apply to the request. 21 * 22 * @return array 23 */ 24 public function rules() 25 { 26 return [ 27 'seed' => 'required', 28 'pref' => 'required', 29 'image' => 'nullable|file|image|mimes:jpg,jpeg,png', 30 'body' => 'nullable', 31 ]; 32 } 33}

投稿2019/12/12 05:28

編集2019/12/12 05:41
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

k3114

2019/12/12 05:38

なるほど、バリデーションがバラバラであったためにエラーが発生していたのですね。 ただ、また似たエラーが出てしまったのですがお分かりになりますでしょうか? 写真とコードは変更して追記させていただいております
退会済みユーザー

退会済みユーザー

2019/12/12 05:39

mime->mimes
k3114

2019/12/12 05:42

実現できました! 別の質問からわざわざ来て頂き本当にありがとうございます! とても助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問