لاراول 13.36: متدهای Rule برای همهٔ قوانین validation و DB::olap
خلاصهٔ کاملتر
طبق گزارش Laravel News، تیم لاراول نسخهٔ v13.36.0 رو منتشر کرده. مهمترین تغییرش اینه که حالا هر قانون validation که فقط شکل رشتهای داشت، یه متد Rule:: هم داره؛ مثل required_with، accepted_if، url، uuid و distinct. یعنی IDE میتونه این قوانین رو autocomplete کنه:
$request->validate([
'phone' => [Rule::requiredWithout('email')],
'website' => ['nullable', Rule::url()->protocols(['https'])],
'device_id' => [Rule::uuid()->version(4)],
'tags.*' => [Rule::distinct()->ignoreCase()],
]);قوانین بدون پارامتر مثل Rule::required() همون رشتهٔ ساده رو برمیگردونن. ولی قوانینی که اسم فیلد یا مقدار میگیرن یه object برمیگردونن که پارامترها رو بهصورت آرایه به validator میده؛ پس دیگه مقداری که توش کاما داره به دو تا مقدار شکسته نمیشه. متد equals() هم به Rule::date() اضافه شده.
تغییر بعدی متدهای olap() و isVitess() روی اتصال MySQL هست. Vitess — یعنی لایهای که MySQL رو برای مقیاس بزرگ تقسیم میکنه و PlanetScale روش ساخته شده — تو حالت پیشفرض OLTP هر کوئری رو به حداکثر ۱۰۰ هزار ردیف محدود میکنه. DB::olap() برای مدت اجرای یه callback به حالت OLAP میره و بعدش برمیگرده، اونم روی هر دو اتصال read و write. روی دیتابیسی که Vitess نیست فقط callback رو اجرا میکنه، پس همون کد روی MySQL محلی هم کار میکنه.
یه flag اختیاری هم برای صف اومده. وقتی گزینهٔ sticky روی اتصال read/write روشن باشه، بعد از یه write، خوندنها هم از اتصال write انجام میشن. چون queue worker یه پروسهٔ طولانیه، یه job که write داره میتونه همهٔ jobهای بعدی رو هم به اتصال write بفرسته. با Worker::$flushStickyConnections = true تو AppServiceProvider این حالت قبل از هر job ریست میشه. پیشفرض خاموشه، چون ممکنه یه job به چیزی که job قبلی نوشته وابسته باشه.
برادکستر Mercure هم حالا رویدادها رو فوری منتشر میکنه، نه از طریق صف؛ یعنی رویدادهایی که فقط Mercure رو هدف میگیرن مثل ShouldBroadcastNow رفتار میکنن. برای برگشتن به حالت قبل باید MERCURE_ASYNC=true بذاری و یه MERCURE_URL هم تعریف کنی. علاوه بر این، mailableهای صفدار حالا attributeهای #[DeleteWhenMissingModels] و #[FailOnTimeout] رو رعایت میکنن؛ پس اگه مدل قبل از ارسال حذف بشه job پاک میشه و ایمیلی که timeout بخوره دوبار فرستاده نمیشه.
یه اصلاح امنیتی هم تو این نسخه هست: تو mailableهای Markdown، ورودی کاربر داخل متن لینک میتونست با backslash براکت بسته رو escape کنه و مقصد لینک رو عوض کنه. حالا backslashها هم کنار براکتها escape میشن.
نکات کلیدی:
- لاراول v13.36.0 برای همهٔ قوانین validation رشتهای متد Rule:: اضافه کرده (PR #61833).
- PlanetScale تو حالت OLTP هر کوئری رو به ۱۰۰ هزار ردیف محدود میکنه و DB::olap() این محدودیت رو موقتاً برمیداره.
- Worker::$flushStickyConnections پیشفرض خاموشه و باید دستی فعالش کرد.
- Mercure حالا پیشفرض همگام برادکست میکنه و MERCURE_ASYNC=true حالت صف رو برمیگردونه.
- باگ تغییر مقصد لینک با backslash تو ایمیلهای Markdown تو PR #61755 رفع شده.




