سلام دوستان.
من قسمت آپلود عکس پروفایل برای کاربر از فانکشن زیر استفاده میکنم.
public function UploadAvatar(Request $request)
{
if($request->hasFile('avatar') && $file = $request->file('avatar'))
auth()->user()->update([
'avatar' => $file->store('uploads/avatars'),
]);
return redirect()->back();
}
حالا میخوام وقتی کاربر عکس جدید آپلود میکنه، عکس قبلی از داخل فولدر public حذف بشه، برای اینکار باید چیکار کنم؟
البته پیش فرض پروفایل هم یک عکس است که در مایگریشن به صورت زیر تعریف کردم.
$table->string('avatar')->default('uploads/avatars/default.jpg');
حالا میخوام دفعه اول اون عکس پیش فرض پاک نشه ولی از دفعات بعد عکس قبلی هم از دیتابیس پاک بشه و هم از فولدر public.
@ali.agk25
این کدی که شما نوشتین فکر کنم مقدار default رو حذف کنه.
من خودم به صورت زیر نوشتم و مشکل حل شد.
public function UploadAvatar(Request $request)
{
if($request->hasFile('avatar') && $file = $request->file('avatar')) {
$image_path = Auth::user()->avatar;
$default = 'uploads/avatars/default.jpg';
if ($default != $image_path) {
File::delete($image_path);
}
auth()->user()->update(['avatar' => $file->store('uploads/avatars')]);
}
return redirect()->back();
}
سلام دوست عزیز
if شما میتونست به شکل زیر باشه برای آپلود به نظرم میتونید امتحان کنید چون اگه نول برگردونه که false میشه و اجرا نمیشه
if($file = $request->file('avatar'))
و در مورد تغییر پروفایل هم اول باید فایل قبلی (همون اواتار کاربر) رو از پروژه پاک کنی و بعد فایل جدید رو ذخیره و آدرسش رو داخل دیتا بیس ذخیره کنی
public function UploadAvatar(Request $request)
{
if($file = $request->file('avatar')){
if(File::exists(auth()->user()->avatar)){
File::delete(auth()->user()->avatar));
}
auth()->user()->update([
'avatar' => $file->store('uploads/avatars'),
]);
}
return redirect()->back();
}
یه نمونه سادش میتونه کد بالا باشه
@ali.agk25
این کدی که شما نوشتین فکر کنم مقدار default رو حذف کنه.
من خودم به صورت زیر نوشتم و مشکل حل شد.
public function UploadAvatar(Request $request)
{
if($request->hasFile('avatar') && $file = $request->file('avatar')) {
$image_path = Auth::user()->avatar;
$default = 'uploads/avatars/default.jpg';
if ($default != $image_path) {
File::delete($image_path);
}
auth()->user()->update(['avatar' => $file->store('uploads/avatars')]);
}
return redirect()->back();
}
بله درست میگید دوست عزیز فقط کافیه قبل از حذف کردن چک کنید که اگه با مقدار دیفالت یکی بود حذف انجام نشه
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟