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

مدیریت حرفه ای فایل ها و تصاویر با پکیج laravel-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 ما هستش.اینجا لازمه همین اول کار دو تا تغییر توی اون اعمال کنید:

  1. دیسک پیشفرض رو تغییر بدید به دیسک جدیدی که ایجاد کردیم
  2. محدودیت سایز اپلود رو افزایش بدیم

خب فایل 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 داکیومنشن مراجعه کنید و با مطالعه بخش موردنظر این پکیج رو برای خودتون شخصی سازی و کاربردی تر کنید.

مرسی که وقت ارزشمندتون رو به مطالعه این مقاله اختصاص دادید :)

سوالی داشتید توی کامنت ها بپرسید