Laravel Fluent Validation: قوانین اعتبارسنجی شیءگرا
خلاصهٔ کاملتر
پکیج Laravel Fluent Validation یه جایگزین شیءگرا (Object-Oriented) برای سیستم اعتبارسنجی لاراول ارائه میده. به جای اینکه قوانین رو به صورت رشتههایی مثل 'required|string|min:2|max:255' بنویسی، میتونی با زنجیر کردن متدها کارت رو انجام بدی. مزیت اصلی اینه که API کاملاً type-safe هست — یعنی وقتی نوع داده رو مشخص میکنی (مثلاً string یا date)، فقط متدهای مرتبط با اون نوع در دسترسن و IDE هم بهت autocomplete میده.
یه نمونه ساده از این سینتکس اینه:
$rules = [
'name' => FluentRule::string()->required()->min(2)->max(255),
'published_at' => FluentRule::date()->after('today')->nullable(),
'age' => FluentRule::integer()->min(18)->max(99),
];یکی از قابلیتهای جالب پکیج اینه که اعتبارسنجی آرایههای تودرتو (nested arrays) رو خیلی تمیزتر میکنه. با متدهای each() و children() میتونی ساختار دادهات رو مستقیم توی قوانین بازتاب بدی، بدون اینکه مجبور باشی از کلیدهای dot-notation مثل items.*.id استفاده کنی.
علاوه بر خوانایی، این پکیج چند بهینهسازی عملکردی هم داره. الگوریتم گسترش wildcard اون O(n) هست، در مقابل رویکرد O(n²) لاراول برای آرایههای بزرگ. قوانین رایج به PHP closure کامپایل میشن تا از overhead موتور اعتبارسنجی دور بمونن. قوانین exists و unique هم برای آرایهها به صورت خودکار در یه کوئری whereIn دستهبندی میشن.
یه ویژگی کاربردی دیگه اینه که میتونی label و پیام خطای سفارشی رو مستقیم توی زنجیر قوانین تعریف کنی. دیگه نیازی به نگهداشتن آرایههای جداگانه attributes() یا messages() در Form Request نیست:
'email' => FluentRule::string()
->email()
->label('Email Address')
->message('Please provide a valid business email.', 'email'),این پکیج به PHP 8.2+ و Laravel 11.0 یا بالاتر نیاز داره و با composer require sandermuller/laravel-fluent-validation نصب میشه. traitهای اختصاصی برای یکپارچهسازی با Livewire و Filament هم داره.
نکات کلیدی:
- جایگزین شیءگرا و type-safe برای سینتکس رشتهای اعتبارسنجی لاراول
- IDE autocompletion و محدودیت متدها بر اساس نوع داده
- اعتبارسنجی آرایههای تودرتو با each() و children() بدون dot-notation
- بهینهسازی عملکردی: الگوریتم O(n)، fast-check closures، و batched DB queries
- تعریف label و پیام خطا مستقیم در زنجیر قوانین
- پشتیبانی از Livewire و Filament




