مدیریت حرفه ای فایل ها و تصاویر با پکیج medialibrary در لاراول

مدیریت حرفه ای فایل ها و تصاویر با پکیج laravel-medialibrary در لاراول امروزه دیگه ای پروژه ای نیست که داخلش ما نیاز نداشته باشیم با تصاویر کار کنیم،هرجای پروژه رو نگاه میکنی میبینی داره یه تصویری آپلود میشه و استفاده میشه.ولی خب باید برای یه سرویس مجزا طراحی کنیم تا درعین حال که همه تصاویر مدیریت شده توی یک جدول قرار دارن،بتونیم خیلی ساده هم ازش استفاده کنیم و قابلیت های خوبی هم در دسترس داشته باشیم،مثل همیشه شما نیاز ندارید ساعت ها کدنویسی کنید! تیم spatieزحمت کشیدن و یه پکیج فوق العاده آماده کردن که خیلی ساده میتونیم یه سیستم مدیریت حرفه ای برای تصاویرمون داشته باشیم.با من همراه باشید تا باهاش آشنا بشیم.نصب پکیج laravel-medialibraryبرای نصب کردن این پکیج دوست داشتنی کافیه دستور زیر رو توی ترمینال خودتون اجرا کنید:composer require &quotspatie/laravel-medialibrary:^9.0.0&quotاین دستور آخرین نسخه فعلی این پکیج رو برای برای ما نصب میکنه،حالا با دستور زیر فایل ماگرشن جدول اون رو از داخل فولدر vendor استخراج میکنیم:php artisan vendor:publish --provider=&quotSpatie\MediaLibrary\MediaLibraryServiceProvider&quot --tag=&quotmigrations&quotحالا با دستور زیر هم جداول خودمون رو ایجاد میکنیم:php artisan migrateحالا با دستور زیر فایل کانفیگ اون رو از داخل فولدر vendor استخراج میکنیم تا بتونیم تغییرات مدنظرمون رو اعمال کنیم:php artisan vendor:publish --provider=&quotSpatie\MediaLibrary\MediaLibraryServiceProvider&quot --tag=&quotconfig&quotخب وارد پوشه config پروژه بشید و داخل فایل filesystems.php این دیسک رو اضافه کنید:'media' => [ 'driver' => 'local', 'root' => storage_path('app/private'), 'url' => env('APP_URL').'/private-storage', 'visibility' => 'private', ]خب حالا وارد فایل media-library.php درون پوشه config بشید،این فایل تنظیمات پکیج media-library ما هستش.اینجا لازمه همین اول کار دو تا تغییر توی اون اعمال کنید:دیسک پیشفرض رو تغییر بدید به دیسک جدیدی که ایجاد کردیممحدودیت سایز اپلود رو افزایش بدیمخب فایل media-library.php رو که باز میکنید کافیه این موارد رو به صورت زیر تغییر بدید 'disk_name' => 'media', 'max_file_size' => 1024 * 1024 * 100,به صورت پیشفرض محدودیت سایز فایل 10 مگابایت هستش و ما اینو تغییر میدیم به 100.البته شما بسته به نوع و نیاز های پروژه میتونید این مقدار رو تغییر بدید.پکیج با موفقیت نصب و کانفیگ شد،بریم برا استفاده:)استفاده از پکیج laravel-medialibraryبرای استفاده از پکیج کافیه وارد مدل مورد نظر خودتون بشید و implements کنید از اینترفیس HasMediaAlias و همینطور داخل مدل این تریت InteractsWithMedia رو use کنید،به این شکل:<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Spatie\MediaLibrary\HasMedia as HasMediaAlias; use Spatie\MediaLibrary\InteractsWithMedia; class Category extends Model implements HasMediaAlias { use InteractsWithMedia; }بعد از این کار حالا ما به یک سری متد جدید روی مدلمون دسترسی داریم.ذخیره سازی فایلبرای ذخیره کردن فایل ها حالا ما چندین روش در اختیار داریم که میتونید از اونها استفاده کنید:روش اول(با پاس دادن آدرس فایل یا همون ایندکس ریکوست حاوی فایل):$yourModel = YourModel::find(1); $yourModel->addMedia($pathToFile)->toMediaCollection('images');روش دوم(با دادن نام فیلد حاوی فایل):$yourModel = YourModel::find(1); $yourModel->addMediaFromRequest('image')->toMediaCollection('images');روش سوم(با دادن لینک فایل):$url = 'http://medialibrary.spatie.be/assets/images/mountain.jpg'; $yourModel->addMediaFromUrl($url)->toMediaCollection();همینطور که متوجه شدید ما یک toMediaCollection داریم،این مورد برای شما یک کالکشن درنظر میگیره با این اسم،و تمامی فایل های شما که با این اسم ذخیره کنید کنار هم قرار میده.برای مثال شما میتونید ده ها یا صدها کالکشن مجزا داشته باشید.ساخت تصاویر ریسپانسیوخب برای اینکه برای شما تصاویر ریسپانسیو هم ایجاد کنه کافیه زمان اضافه کردن یک تصویر،متد withResponsiveImagesروش صدا بزنید،به این شکل:$yourModel->addMedia($yourImageFile)->withResponsiveImages()->toMediaCollection('image');خب حالا فایل هامون رو ذخیره کردیم.برای دسترسی به اونهام کافیه از متد زیر استفاده کنیم:$mediaItems = $yourModel->getMedia();توی حالا بالا تمامی کالکشن های موجود لیست میشن اما اگه قصد دارید کالکشن خاصی رو برگردونید(مثلا کالکشن image که توی مثال بالا قرار دادیم) کافیه به این شکل متد رو صدا کنید.$mediaItems = $yourModel->getMedia('images');خروجی دستور بالا یک ارایه هست که با انتخاب یک مورد از اون میتونیم روی متدهای جدیدی برای دسترسی به لینک دانلود اون فایل دسترسی داشته باشیم.به مثال های زیر توجه کنید:$publicUrl = $mediaItems[0]->getUrl(); $publicFullUrl = $mediaItems[0]->getFullUrl(); //url including domain $fullPathOnDisk = $mediaItems[0]->getPath();و در نهایت برای حذف یک ایتم از کالکشن خودتون میتونید به این شکل عمل کنید:$mediaItems[0]->delete();و اگه هم قصد دارید کل کالکشن خودتون رو خالی کنید به این شکل:$yourModel->clearMediaCollection('images');البته در نظر داشته باشید که این تصاویر مرتبط هستند با مدل شما و اگه اون فیلد از جدول مدل شما حذف بشه تمامی فایل های مرتبط به اون هم حذف میشن.این پکیج متدهای زیاد دیگه ای داره که میتونید به این لینک مراجعه کنید و بیشتر و بیشتر دربارش بخونید.اگه نیاز داشتید یک سری قسمت های رو هم تغییر بدید مثل نام فایل ها،ساخت لینک موقت (چون این مورد فقط برای دیسک های s3 فعلا فقط موجوده)‌و ... میتونید به بخش advanced used داکیومنشن مراجعه کنید و با مطالعه بخش موردنظر این پکیج رو برای خودتون شخصی سازی و کاربردی تر کنید.مرسی که وقت ارزشمندتون رو به مطالعه این مقاله اختصاص دادید :)سوالی داشتید توی کامنت ها بپرسید