پارامتر strict برای هلپرهای ورودی request تو لاراول 13.40
خلاصهٔ کاملتر
تو لاراول، $request->integer('page') و متدهای مشابه مقدار ورودی رو میخونن و همزمان به یه نوع خاص تبدیل میکنن. به گفتهٔ مقاله، مشکل اینه که این تبدیل با cast سادهٔ PHP انجام میشه. مثلاً اگه کسی per_page=abc123 بفرسته، مقدار پیشفرض اعمال نمیشه و نتیجه 0 هست، چون پیشفرض فقط وقتی کلید کلاً نباشه استفاده میشه. متد string() هم اگه آرایه بگیره خطای Array to string conversion میده.
Laravel 13.40 یه آرگومان strict به این هلپرها اضافه کرده. با strict: true متد قبل از تبدیل چک میکنه مقدار برای اون نوع معتبره یا نه، و اگه نبود پیشفرض تو رو برمیگردونه:
$perPage = $request->integer('per_page', 25, strict: true);
// ?per_page=50 => 50
// ?per_page=12.5 => 25
// ?per_page=007 => 25
// ?per_page=12abc => 25هر متد قانون خودشو داره. integer() اعشار، صفرهای اول و عددهای بزرگتر از int رو رد میکنه. float() عدد صحیح و نماد علمی مثل 1e3 رو قبول میکنه ولی جداکنندهٔ هزارگان رو نه. boolean() بدون فلگ هر چیزی جز 1، true، on و yes رو false حساب میکنه، پس notify=maybe اعلانها رو خاموش میکرد. با فلگ، فقط 0، false، off و no میشن false و بقیه پیشفرض رو میدن. string() هم برای آرایه، بولین و null پیشفرض رو برمیگردونه.
پیشفرض میتونه یه closure باشه که فقط وقتی لازم شد اجرا میشه. تو حالت strict، پیشفرض cast نمیشه؛ پس اگه null بدی، برای ورودی نامعتبر null میگیری و میتونی «محدودیتی نیست» رو از «محدودیت صفر» تشخیص بدی. فقط حواست باشه docblockها هنوز نوع int و float رو اعلام میکنن و ابزارهای static analysis ممکنه گیر بدن.
این فلگ از trait InteractsWithData میاد، پس روی Fluent، ValidatedInput (خروجی $request->safe())، Uri::query()، $attributes کامپوننتهای Blade و $this->input() تو دستورهای Artisan هم کار میکنه. نویسنده میگه strict بیصدا پیشفرض رو برمیگردونه و به کسی نمیگه ورودی غلط بوده. پس برای فیلدهای اجباری، مثل تعداد سفارش، باید از validation استفاده کنی تا کاربر خطا ببینه، نه اینکه بیخبر ۲۵ تا سفارش ثبت بشه.
نکات کلیدی:
- فلگ strict از Laravel 13.40 روی integer()، float()، boolean()، string() و str() در دسترسه
- بدون strict، مقدار abc123 برای integer() به 0 تبدیل میشه نه به پیشفرض
- تو حالت strict، پیشفرض cast نمیشه و null هم مجازه
- برای ورودیهای اجباری هنوز validation انتخاب درسته
- این قابلیت رو Chris Morrell تو PR شمارهٔ 62254 اضافه کرده




