こんにちは。
現在Laravelで投稿した内容(文章と画像)を編集するためのフォームを作っています。
テキストフィールドには現在登録されている内容が表示されるようにし、画像は新しいものが選択されなかった場合は、何も変更されないようにしようとしています。
以下がコードになります。
web.php
php
1Route::get('/tests/edit/{id}', 'TestController@edit'); //編集 2Route::patch('/tests', 'TestController@update'); //更新
edit.blade.php
php
1@extends('layouts.app') 2 3@section('content') 4<div> 5 <form action="/tests" method="post" enctype="multipart/form-data"> 6 {{ csrf_field() }} 7 {{ method_field('patch') }} 8 料理名:<input type="text" name="name" value='{{ $test->name }}'><br> 9 画像: <input type="file" name="image"><br> 10 <input type='submit' value='更新'> 11 </form> 12</div> 13@endsection
TestController.php
php
1public function edit(Request $request) 2 { 3 $test = Test::findOrFail($request->id); 4 return view('test.edit', ['test' => $test]); 5 } 6 7public function update(Request $request, Test $test) 8 { 9 $test->user_id = $request->user()->id; 10 $test->name = $request->name; 11 12 if($request->hasFile('image')) { 13 Test::delete('public/image/' . $test->image); //元の画像を削除☆ 14 $path = $request->file('image')->store('public/image'); 15 $test->image = basename($path); 16 $test->save(); 17 } 18 19 $test->save(Input::except('image')); //image以外を保存☆☆ 20 21 return redirect('/tests')->with('flash_message', '編集が完了しました'); 22 }
新しい画像を保存するときにpublicにある元の画像を削除したい(コードの☆)のですが、
Non-static method Illuminate\Database\Eloquent\Model::delete() should not be called statically
というエラーが表示されます。また、if文で、画像ファイルが選択されているときには画像と画像のパスを他のデータより先に保存しているので、テキストを保存するときは
$test->save(Input::except('image'));
としているのですが(コードの☆☆)、これは正しいのでしょうか。
ご教示いただけたら嬉しいです。よろしくお願いいたします。
以下のページを参考にしました。
Only update image if user uploaded a new one, Laravel
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/19 06:43