Laravel5.5で開発しています。以下、教えてください・・・よろしくお願いいたします。。
やりたいこと
猫を登録する機能を作っています。猫の名前とか、写真を登録します。
その更新処理(edit~update)を作成しました。
名前などのテキスト部分は、編集画面に、すでに登録されているものを表示できているので、
他の部分を更新した時に変更されていなければ、そのままの状態でupdateできますが、
画像は、edit画面を開いた段階で「選択されていません」になってしまい、
画像は変更したくなくても毎回画像を登録しないと空状態に戻ってupdateされてしまいます・・・
理想は、edit画面では、すでに登録されている画像のファイル名が表示され、
変更したければアップロードし、変更したくなければアップロードしない。
edit画面で画像はアップロードせずに更新ボタンをクリックすると、createの時に登録された画像が保持されている というものです。
コード
editのblade
{!! Form::model($cat, ['route' => ['cats.update', $cat->id], 'files' => true,'method' => 'put']) !!} {{ csrf_field() }} <div class="form-group"> {!! Form::label('mainimage_path', 'メイン写真') !!} <input type="file" name="mainimage_path"> </div> {!! Form::submit('更新', ['class' => 'btn btn-primary']) !!}
updateのController(画像部分)
public function update(Request $request, $id) { $cat = Cat::find($id); // 画像をリサイズ $file = $request->file('mainimage_path'); // 画像の拡張子を取得 $extension = $request->file('mainimage_path')->getClientOriginalExtension(); // 画像の名前を取得 $filename = $request->file('mainimage_path')->getClientOriginalName(); $timestamp = time(); $filename = $timestamp . $filename; // 画像をリサイズ変更したところ $width = 500; $resize_img = Image::make($file)->resize($width, null, function($constraint){ $constraint->aspectRatio(); }); $path = Storage::disk('s3')->put('/myprefix/'.$filename, $resize_img->stream()->__toString(), 'public'); // 画像のURLを参照 $url = Storage::disk('s3')->url('myprefix/'.$filename); //dd($url); $cat->mainimage_path = $url; $cat->save(); return redirect()->action('CatsController@index'); }
ちょっと思ったのは、画像を登録するところが空だったら画像のところだけupdateしない、
値が入っていたらupdateする
ですが、(それもできるか不明です・・・)
他によい方法あれば教えていただけると嬉しいです。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/22 03:03