初投稿です。これからプログラミング学習のアウトプット始めていこうと思います。
世の中のサイト(主にSNS)ってユーザーアカウントにアイコン(画像)が設定可能ですよね。
それを編集するときアイコン以外(名前、プロフィール等)だけ編集してアイコンはいじらない場合、アイコン画像はそのまま変更なしでプロフィールの変更ができます。
でも自分でlaravelでサイトを作ってみて気づいたのが画像に対してはoldヘルパーが適用されずどうやったらその機能を実現できるのかという点です。
今回自分なりに思いついた実装方法を紹介していきます。
#ルーティング
web.php
Route::get('/posts/edit/{post}', 'PostsController@edit');
暗黙の結合を使って編集ページにpostsテーブルからカラムを持っていきます
今回画像のカラム名はpathになります。
#if文を使って実装できた
PostsController@edit
public function update(Request $request, Post $post) {
// 画像変更の確認
if(!empty($request->path)) {
$file = $request->file('path');
$filename = $file->getClientOriginalName();
$request->file('path')->storeAs('public',$filename);
$post->path = '/storage/' . $filename;
}else {
$post->path = $post->path;
}
編集ページのsubmitボタンが押されたとき、$request->pathがあれば(新たに画像が挿入されているなら)新たに画像に対してユニークな名前をつけそれを投稿の画像としてデータベースに登録、そうでないならば(画像が変更されていないなら)以前の画像のパスを再代入してデータベースに登録
これで実装ができました!普段使い慣れているサービスの機能を実装できると気持ちがいいですね