لاراول ۱۴ تو راهه: هر چی تا الان میدونیم
خلاصهٔ کاملتر
به گفتهٔ Laravel News، لاراول ۱۴ قراره سهماههٔ اول ۲۰۲۷ منتشر بشه و حداقل نسخهٔ PHP رو از 8.3 میبره به PHP 8.4، چون Symfony 8 همینو لازم داره. هنوز تاریخ دقیق یا لیست رسمی قابلیتها اعلام نشده و همهچیز از برنچ master مخزن laravel/framework اومده، پس ممکنه تا روز انتشار عوض بشه. بیشتر قابلیتهای جدید همچنان تو ریلیزهای هفتگی لاراول ۱۳ میان. فقط اونایی که یه contract یا امضای یه متد رو عوض میکنن منتظر نسخهٔ ۱۴ میمونن.
یکی از قابلیتهای تازه Route::query() هست که از متد HTTP QUERY پشتیبانی میکنه (یعنی یه متد امن مثل GET که میتونه body هم داشته باشه). میدلور CSRF هم باهاش مثل GET رفتار میکنه. یه متد authorize() هم به contract و trait Authorizable اضافه شده. کارش مثل $user->can() هست، با این فرق که وقتی چک رد بشه AuthorizationException پرت میکنه:
// Laravel 13
Gate::forUser($user)->authorize('viewAny', Post::class);
// Laravel 14
$user->authorize('viewAny', Post::class);هلپر report() هم حالا یه آرایهٔ context اختیاری میگیره، مثلاً برای اینکه order_id رو کنار خطا لاگ کنی. چون امضای ExceptionHandler عوض شده، اگه هندلر سفارشی داری که report() رو override کرده باید پارامتر جدید رو بهش اضافه کنی. Storage::fake('ondemand') هم حالا دیسکهایی رو که با Storage::build() ساخته میشن تو تست جعل میکنه. orWhereKey() و orWhereKeyNot() هم اضافه شدن و هر چهار متد whereKey حالا subquery قبول میکنن.
تغییرات شکستنی هم کم نیستن. متدهای pause صف حالا اول اسم صف رو میگیرن و connection رو آخر، بهصورت اختیاری. lazy() و chunk() دیگه query builder رو دستکاری نمیکنن. تو لاراول ۱۳ اگه بعد از lazy() روی همون builder متد count() رو صدا میزدی صفر برمیگردوند. findOr() با آرایهای از IDها هم حالا اگه یکی پیدا نشه callback رو اجرا میکنه، درست مثل findOrFail().
یه باگ چهارساله هم تو کش درست شده. Cache::has() با آرایه همیشه true برمیگردوند و Cache::forget() با آرایه اصلاً کلیدها رو پاک نمیکرد:
Cache::put('foo', 'bar');
Cache::has(['foo', 'missing']);
// Laravel 13: true
// Laravel 14: falseآخری هم MassPrunable هست که حالا مثل Prunable رکوردهای soft-delete شده رو هم پاک میکنه. اگه روی مدلی که soft delete داره ازش استفاده میکنی و رفتار قبلی رو میخوای، withoutTrashed() رو به کوئری prunable() اضافه کن. طبق سیاست پشتیبانی لاراول، نسخهٔ ۱۴ تا سهماههٔ سوم ۲۰۲۸ رفع باگ و تا سهماههٔ اول ۲۰۲۹ آپدیت امنیتی میگیره.
نکات کلیدی:
- انتشار لاراول ۱۴ برای سهماههٔ اول ۲۰۲۷ پیشبینی شده و حداقل PHP 8.4 میخواد
- رفع باگ تا Q3 2028 و آپدیت امنیتی تا Q1 2029
- لاراول ۱۳ تا Q3 2027 رفع باگ و تا ۱۷ مارس ۲۰۲۸ آپدیت امنیتی میگیره
- Route::query() از متد HTTP QUERY پشتیبانی میکنه و $user->authorize() جای Gate::forUser() رو میگیره
- Cache::has() با آرایه فقط وقتی true میده که همهٔ کلیدها وجود داشته باشن
- MassPrunable حالا رکوردهای soft-delete شده رو هم force delete میکنه
- PHPUnit نسخههای 11.5، 12.5 و 13 پشتیبانی میشن




