سلام دوستان من وقتی میخام عکس مقاله هامو اپدیت کنم عکس بدرستی اپدیت میشه ولی میخام عکس جدید که اپدیت شد عکس قبلی از توی مسیر پروژم حذف بشه برای اینکار باید چکار کنم توی جدول ارتیکل ها فیلدی دارم به اسم images کدهای مربوط به اپلود عکس رو توی یه کنترلر دیگه نوشتم در پایین کدهای کنترلر آرتیکل قسمت اپدیت و کد های کنترلر image قسمت اپلود عکس رو میذارم کسی راهنماییم کنه ممنون میشم
@mehrdadroshanraee69
برای پاک کردن فایل میتونید از این کد استفاده کنید.
unlink(path_to_file);
یا
Storage::delete(file);
برای پاک کردن دایرکتوری
rmdir(path_to_folder);
اگر میخواید چند فایل رو با هم پاک کنید یا نام دقیق فایل رو ذخیره ندارید میتونید از کد زیر استفاده کنید.
foreach (glob( path_to_file )) as $filename) {
unlink($filename);
}
glob( pathtofile ) یک آرایه از تمام فایل ها بر میگردونه . جای pathtofile مسیر فایلتون رو مشخص می کنید که میتونه با استفاده از به چند فایل اشاره داشته باشه مثلا user1. فایل های user1.png و user1.jpg و هر فایل دیگه ای که از فرمت پیروی میکنن به شما بر میگردونه
unlink هم فایل رو پاک میکنه.
سلام
اگر با آپلود عکس جدید می خوای عکس قبلی حذف بشه ابتدا شما با دستور
unlink($article->images)
$article->images= 'new path image'
تصویر قبلی رو حذف کن بعد مجدد مسیر عکس جدیدو در فیلد images قرار بده.
البته اگر مقاله شما تک تصویری باشه.
@mehrdadroshanraee69
@hosseinshirinegad98
@forughi.vahid
توی متد اپدیت این دستوراتی که فرمودید رو بنویسم؟ من کئ مروبط به اپلود عکس رو عرض کردم البته توی کنترلر جداگانه ای نوشتم و کنترلر article رو extend کردم از اون کنترلر مربوط به اپلود عکس
@mehrdadroshanraee69
هر جایی که میخواید تصویر جدید رو ذخیره کنید قبلش این کد رو بزارید تا تصویر قبلی پاک بشه ،
در مورد کنترلر هایی که نوشتید اگر بفرمایید هدفتون از این extend کردن و جدا کردن این کنترلر ها دقیقا چی بوده بهتر میتونم راهنماییتون کنم
دوست عزیز پس این حرف شما
من وقتی میخام عکس مقاله هامو اپدیت کنم عکس بدرستی اپدیت میشه
چه معنی ای میده؟ یعنی شما میخوای عکس جدیدی آپلود کنی دیگه. غیر از اینه مگه؟
هر کجا خواستی آپلود انجام بدی قبل آپدیت شدن مقاله تصویر فعلیشو با دستورات بالا حذف کن مقدار جدیدو ست کن.
@mehrdadroshanraee69
@forughi.vahid
دوست عزیز فقط با این هدف که ArticleController کدهای کمتر و خواناتری داشته باشه برای همین کدهای مربوط به اپلود ایمیج رو بردم توی کنترلر جداگانه بنظرتون این کار بنده کار اصولی نبوده؟
@hosseinshirinegad98
عکس به درستی اپدیت میشه و توی دیتابیس هم ذخیره میشه اما توی مسیر ذخیره عکس توی پروژه عکس های قبلی هم هست میخام اون عکسهای قبلی دیگه پاک شه وقتی عکس جدید اپلود شده چون دیگه نیازی به اون عکس های قبلی ندارم توی فایل پروژه باشه
خوب من هم همینو دارم به شما میگم. شما باید پیش از اینکه مقدار جدیدی در فیلد images قرار بدی ابتدا به وسیله مقدار فیلد images تصویر قبلی رو حذف کنی بعد مقدار جدیدی در همون لحظه در فیلد images قرار بدی.
ضمنا کدهای آپلود عکسو بردی در یک کنترلر دیگه، کار اصولی ای نیست یا میتونی براش helpers درست کنی یا اینکه در مدل Article این آپلودو انجام بدی یا در همون کنترلر آرتیکل یک متد برای آپلود تصویر بسازی. کنترلر دیگه کار اشتباهی است و گیج کنندست.
@mehrdadroshanraee69
من کدهاشو براتون نوشتم
// متد آپدیت آرتیکل
public function update(Request $request, Article $article)
{
// ابتدا وجود فایل باید برسی بشه که آیا اقدام به آپدیت تصویر کرده این
if ( $request->hasFile( 'image' ) )
{
unlink($article->images); // ابتدا فایل قبلی در مسیرش حذف میشود
// سپس تصویر جدید آپلود شده و مسیرش برگشت داده میشود و در فیلد images قرار میگیرد
$article->images = $this->uploadFile($request->file('image'));
}
//... ادامه کدهای آپدیت مقاله
//در نهایت مقاله آپدیت میگردد
$article->update();
return redirect()->back(); // این مسیر فرضی هست شما هر جا دوست داشتی ریدایرکت کن. و تمام
}
// متد جداگانه برای آپلود تصویر در همان کنترلر آرتیکل
public function uploadFile(UploadedFile $file)
{
$path = 'مسیری که باید تصویر ذخیره بشه';
$fileName = Str::random(50); // یک نام جدید برای فایل درست می کنی.
$fileName = $fileName. '.'. $file->getClientOriginalExtension(); // پسوند فایل را به انتهای نام فایل اضافه می کند
$file->move($path, $fileName); // تصویر در مسیر مورد نظر ذخیره میگردد
return $path . '/'. $fileName //این مسیرو را در جدول ذخیره می کنی
}
و این دوتا کلاسو هم در همین کنترلر که دو متد درش هستند ArticleController یوز (use) کن
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Illuminate\Support\Str;
سلام
از روی تصویر کدهای شما رو مطالعه کردم
کد نویسی شما خوبه ولی اینکه یک کنترلرو از کنترلر دیگه ارث بری کردید کار درستی نیست و اصلا توصیه نمیشه. همان طور که در بالا گفتم میتونید یک هلپر براش بسازید و آپلودو در اون انجام دهید یا در همان کنترلر متدی برای آپلود ایجاد نمایید.
و اما برای حذف تصویر قبلی درست در تصویر دومی که نام کنترلرشArticleController هست داخل شرط if خط 109 قبل از خط 110 این کدو برای حذف تصویر قبلی قرار بدین.
unlink($article->images);
در اینجا قطعا فیلد images باید مسیر تصویر شما در پروژه باشد.از الگویی که در بالا گفتم میتونید استفاده کنید و در همین کنترلر متدهای imageUpload و resize رو قرار بدین. @mehrdadroshanraee69
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟