画像ファイルをアップロードしたいです。
Laravel7にてフリマアプリ作成中です。
商品の画像をアップロードしたいのですが、以下のようなエラーが発生しました。
saveImage()メソッドでnullが指定されてコントローラーで呼び出されてしまっている(?)のかと思いますが、なぜnullになるのかわかりません。
発生している問題・エラーメッセージ
Argument 1 passed to App\Http\Controllers\SellController::saveImage() must be an instance of Illuminate\Http\UploadedFile, null given, called in /work/backend/app/Http/Controllers/SellController.php on line 40
該当のソースコード
public function store(SellRequest $request, Item $item) { $user = Auth::user(); $imageName = $this->saveImage($request->file('item-image')); $item->image_file_name = $imageName; ~略 $item->save(); return redirect()->back() ->with('status', '商品情報を変更しました。'); }
private function saveImage(UploadedFile $file): string { $tempPath = $this->makeTempPath(); Image::make($file)->fit(250, 150)->save($tempPath); $filePath = Storage::disk('public') ->putFile('item-images', new File($tempPath)); return basename($filePath); }
<form method="POST" action="{{ route('sell') }}" class="p-2" enctype="multipart/form-data"> @csrf {{-- 商品画像 --}} <div>商品画像</div> <div class="d-none d-md-block"> <span class="item-image-form image-picker"> <input type="file" name="item-image" class="d-none" accept="image/png,image/jpeg,image/gif" id="item-image" /> <label for="item-image" class="d-inline-block" role="button"> <img src="/images/item-image-default.png" style="object-fit: cover; width: 300px; height: 300px;"> </label> </span> </div> <div class="d-md-none"> <span class="item-image-form image-picker"> <input type="file" name="item-image" class="d-none" accept="image/png,image/jpeg,image/gif" id="item-image" /> <label for="item-image" class="d-inline-block" role="button"> <img src="/images/item-image-default.png" style="object-fit: cover; width: 100%; height: 20%;"> </label> </span> </div> <div class="form-group mb-0 mt-3 w-50 offset-3"> <button type="submit" class="btn btn-block btn-primary"> 出品する </button> </div> </from>
Route::post('sell', 'SellController@store')->name('sell');
SellRequest
1public function rules() 2 { 3 return [ 4 'item-image' => ['file', 'image'], 5 'name' => ['required', 'string', 'max:255'], 6 'description' => ['required', 'string', 'max:2000'], 7 'category' => ['required', 'integer'], 8 'condition' => ['required', 'integer'], 9 'price' => ['required', 'integer', 'min:100', 'max:9999999'], 10 ]; 11 }
補足情報(FW/ツールのバージョンなど)
laravel7
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー