لاراول ۱۳.۲۰ با پردازش تصویر داخلی اومد
خلاصهٔ کاملتر
به گزارش Laravel News، نسخهٔ ۱۳.۲۰.۰ لاراول پردازش تصویر رو بهصورت داخلی (first-party) وارد خود فریمورک کرده. کامپوننت جدید Illuminate\Image کارهایی مثل تغییر اندازه، برش، تبدیل فرمت و ذخیرهسازی رو انجام میده، بدون اینکه لازم باشه سراغ یه رَپر شخصثالث بری. منبع تصویر هم میتونه آپلود کاربر، استوریج، URL یا بایت خام باشه.
منطق کار تغییرناپذیره: هر تبدیل یه نمونهٔ جدید برمیگردونه و تبدیلهای صفشده وقتی اعمال میشن که نتیجه رو بخوای. رایجترین مسیر هم از آپلود شروع میشه — Request::image() برای یه کلید فایل، نمونهٔ Image میده یا اگه اون کلید فایل آپلودی نباشه null:
$request->image('avatar')
->cover(200, 200)
->toWebp()
->store('avatars');روی خود نمونه هم تبدیلهای متنوعی هست: cover، contain، crop، resize، scale، rotate، blur، sharpen، grayscale، flip، flop و orient که چرخش EXIF رو اعمال میکنه. برای خروجی هم toWebp و toJpg()->quality(80) رو داری و optimize() که پیشفرض WebP با کیفیت ۷۰ میده. متدهای بازرسی مثل width()، dimensions() و mimeType() هم موجودن.
چون نمونهها تغییرناپذیرن، از یه تصویر منبع میشه چند نسخهٔ مختلف ساخت. دو درایور هم عرضه شده — GD و Imagick — که هر دو پشتصحنه روی Intervention Image نسخهٔ ۴ سوارن. درایور رو میشه برای هر تصویر جدا انتخاب کرد (usingGd()، usingImagick()) و با Image::transformUsing() رفتار یه درایور تو یه تبدیل خاص رو بازنویسی کرد.
یه نکتهٔ مهم برای ارتقا: intervention/image یه وابستگی پیشنهادیه، نه اجباری. یعنی قبل از اینکه سراغ Image بری باید خودت با کامپوزر نصبش کنی، وگرنه به مشکل میخوری.
دومین تغییر شاخص، اتریبیوت #[WithoutMiddleware] برای کنترلرهاست. هر جا #[Middleware] یه میدلور رو به کلاس یا متد وصل میکنه، این یکی حذفش میکنه — یعنی همون رفتار «استثنا کردن میدلور» تو گروههای روت، اینبار در سطح اتریبیوت:
#[Middleware(EnsureTokenIsValid::class)]
class UserController
{
public function index() {}
#[WithoutMiddleware(EnsureTokenIsValid::class)]
public function profile() {}
}تطبیق با ReflectionAttribute::IS_INSTANCEOF انجام میشه، پس زیرکلاسهای یه میدلور هم استثنا میشن. کنارش گزینهٔ prefix تو config/session.php اومده: اپهایی که هم سشن و هم کش رو روی ردیس گذاشتن تا حالا سشنها پیشوند کش رو به ارث میبردن؛ حالا میشه پیشوند جدا داد و چون کش قبل از اعمال پیشوند کلون میشه، کلیدهای کش دستنخورده میمونن.
از بقیهٔ تغییرها: متدهای incrementEachQuietly() و decrementEachQuietly() که چند ستون رو با هم و بدون شلیک رویدادهای مدل بهروز میکنن؛ پذیرفته شدن enum بهعنوان کلید میدلور WithoutOverlapping که با کلیدهای رشتهای قبلی سازگاره؛ تولید پیشوند زمانی مرتب و بدون تداخل در make:migration؛ و اعمال #[SensitiveParameter] روی پارامترهای حاوی راز تا از استکتریس بیرون بمونن.
نکات کلیدی:
- پردازش تصویر داخلی با کامپوننت Illuminate\Image و API تغییرناپذیر
- منبع تصویر از آپلود، مسیر، URL، بایت خام، base64 یا دیسک استوریج
- دو درایور GD و Imagick روی Intervention Image نسخهٔ ۴ (وابستگی پیشنهادی، خودت نصبش کن)
- اتریبیوت #[WithoutMiddleware] برای استثنا کردن میدلور در سطح کنترلر و متد
- پیشوند جدا برای سشنهای ردیس، افزایش/کاهش بیصدای چندستونه و enum بهعنوان کلید WithoutOverlapping
- برای اپلیکیشنهای معمول تغییر شکنندهٔ مهمی انتظار نمیره




