لاراول 13.39 منتشر شد: دستور پاکسازی سشن و مدل بدون کلید اصلی
خلاصهٔ کاملتر
تیم لاراول نسخه 13.39.0 رو منتشر کرده و مهمترین چیزش دستور جدید session:garbage-collect هست. تا الان لاراول سشنهای منقضی رو روی یه درخواست تصادفی پاک میکرد و احتمالش با تنظیم lottery تو config/session.php مشخص میشد. حالا میتونی این کارو با Scheduler سر یه زمان مشخص انجام بدی:
Schedule::command('session:garbage-collect')->hourly();این دستور از مقدار session.lifetime برای تشخیص سشنهای منقضی استفاده میکنه. اگه نمیخوای درخواستها هم دیگه پاکسازی رو انجام بدن، lottery رو بذار روی [0, 100]. یعنی کار سنگین پاکسازی دیگه وسط درخواست کاربر اتفاق نمیافته.
تغییر بعدی مربوط به Eloquent هست. حالا با اتریبیوت #[Table] میشه کلید اصلی مدل رو کامل خاموش کرد. قبلاً اگه کلید رو null میذاشتی، دوباره برمیگشت سراغ $primaryKey که پیشفرضش id هست. یه PR دیگه هم این مدلها رو non-incrementing میکنه که create() بعد از insert خطا نده:
#[Table(name: 'activity_log', key: false)]
class Activity extends Model {}
Activity::create(['event' => 'login']);رویداد JobAttempted هم حالا یه پراپرتی duration به میلیثانیه داره. قبلاً فقط JobProcessed زمان اجرا داشت، پس برای جابی که شکست میخورد یا برای تلاش دوباره برمیگشت هیچ زمانی نداشتی. این زمان برای جابهایی که با dispatchSync() اجرا میشن هم اضافه شده. علاوه بر این، Rule::array() حالا متدهای min()، max()، between() و exactly() رو داره و دیگه لازم نیست برای اندازهٔ آرایه رشتهٔ min:1 بنویسی.
تو بخش تست هم چند تا اصلاح مهم اومده. اتریبیوت #[WithoutMigrationEvents] نمیذاره کوئریهای مایگریشن تو expectsDatabaseQueryCount() شمرده بشن. Mail::html() و Mail::plain() قبلاً موقع تست واقعاً ایمیل میفرستادن که حالا fake میشن. RefreshDatabase هم بعد از هر تست همهٔ سطحهای تراکنش باز رو rollback میکنه و assertSeeText('0') هم دیگه الکی پاس نمیشه.
دو تا تغییر دیگه هم ارزش دونستن دارن. رابطهٔ BelongsToMany حالا forceCreate() و forceCreateQuietly() داره و قبلاً مدل ساخته میشد ولی به رابطه وصل نمیشد. دستورهای config:cache، route:cache و event:cache هم حالا فایل رو اول موقت مینویسن و بعد rename میکنن. قبلاً ممکن بود یه درخواست وسط اجرای دستور یه فایل کش خالی بخونه و با opcache.validate_timestamps=0 همهٔ درخواستها تا ریاستارت PHP-FPM خطا بدن.
نکات کلیدی:
- دستور session:garbage-collect پاکسازی سشنها رو قابل زمانبندی میکنه و با lottery برابر [0, 100] پاکسازی تصادفی خاموش میشه.
- با #[Table(key: false)] مدل Eloquent میتونه هیچ کلید اصلیای نداشته باشه.
- رویداد JobAttempted حالا duration به میلیثانیه داره، حتی برای جابهای ناموفق و dispatchSync().
- Rule::array() متدهای min()، max()، between() و exactly() گرفته.
- فایلهای کش config، route و event حالا اتمیک نوشته میشن و خطر کش خالی زیر OPcache از بین رفته.




