لاراول ۱۳.۱۰: درایور کش جدید مبتنی بر فایلسیستم
خلاصهٔ کاملتر
مهمترین قابلیت لاراول ۱۳.۱۰ یه درایور کش جدید به اسم storage هست که روی سرویس فایلسیستم لاراول سوار میشه. یعنی میتونی هر دیسک پیکربندیشدهای — از جمله s3 — رو بهعنوان یه کشاستور ساده key/value استفاده کنی، بدون نیاز به Redis یا Memcached. هر مقدار کششده بهصورت یه فایل با payload سریالایزشده و timestamp انقضا ذخیره میشه.
پیکربندی این درایور در config/cache.php اضافه شده:
'storage' => [
'driver' => 'storage',
'disk' => env('CACHE_STORAGE_DISK'),
'path' => env('CACHE_STORAGE_PATH', 'framework/cache/data'),
],کافیه CACHE_STORAGE_DISK رو به هر دیسکی که میخوای اشاره بدی تا کش از طریق همون دیسک خونده و نوشته بشه.
برای صفها (Queue)، چند قابلیت جدید اضافه شده. اول اینکه queue:work حالا گزینهی --stop-when-empty-for داره که اگه worker چند ثانیهی مشخصشده هیچ jobای پردازش نکرد، بهطور خودکار متوقف میشه. این برای محیطهایی که worker باید موقت باشه عالیه. دوم، رویداد WorkerIdle اضافه شده که هر بار صف خالی باشه فایر میشه — برخلاف JobPopping که روی هر تلاش pop فایر میشه — و به تشخیص workerهای واقعاً بیکار کمک میکنه.
در بخش زمانبندی، Schedule::group() حالا از callbackهای lifecycle مثل onSuccess و onFailure پشتیبانی میکنه. یعنی میتونی یه بار برای کل گروه callback تعریف کنی، نه اینکه برای هر task جداگانه تکرار کنی:
Schedule::group(function (Schedule $schedule) {
$schedule->command('reports:generate');
$schedule->command('reports:email');
})->onFailure(function () {
// fires for any failing task in the group
})->onSuccess(function () {
// fires when each task in the group succeeds
});متد Schema::hasForeignKey() هم اضافه شده که بررسی میکنه آیا یه foreign key خاص روی جدول وجود داره یا نه. این در migrationها مفیده تا از اضافهکردن دوبارهی یه constraint که قبلاً وجود داشته جلوگیری کنی.
از بهبودهای تست، Queue::assertPushedOnce() اضافه شده که جایگزین خواناتری برای assertPushedTimes(JobClass::class, 1) هست. همچنین QueueFake حالا نامهای صف از نوع Enum رو همونطوری که درایور واقعی نرمالسازی میکنه پردازش میکنه. اصلاح باگ مهم دیگه اینه که قوانین اعتبارسنجی starts_with و ends_with دیگه مقادیر عددی رو رد نمیکنن و رفتار لاراول ۱۲ برگشته.
نکات کلیدی:
- درایور کش storage امکان استفاده از S3 یا هر دیسک دیگهای بهعنوان کشاستور رو بدون پکیج اضافه میده
- گزینه --stop-when-empty-for برای توقف خودکار workerهای بیکار
- رویداد WorkerIdle برای تشخیص دقیقتر workerهای خالی
- Schedule::group() حالا callbackهای lifecycle گروهی داره
- Schema::hasForeignKey() برای بررسی وجود foreign key در migrationها
- assertPushedOnce() برای تستهای خواناتر صف
- اصلاح باگ اعتبارسنجی starts_with/ends_with برای مقادیر عددی




