Laravel Fluent Validation від розробника Sander Muller — це пакет, що замінює традиційний синтаксис валідації Laravel на об'єктно-орієнтований Fluent API. Він забезпечує автодоповнення в IDE та типобезпеку, гарантуючи відповідність правил обраному типу даних.
# Гнучкі та типобезпечні правила
Замість конкатенації рядків на кшталт 'required|string|min:2|max:255', ви використовуєте ланцюжок методів. API враховує контекст: як тільки визначено тип (наприклад, string або date), стають доступними лише ті методи, що стосуються цього конкретного типу:
use SanderMuller\LaravelFluentValidation\FluentRule;
$rules = [
'name' => FluentRule::string()->required()->min(2)->max(255),
'published_at' => FluentRule::date()->after('today')->nullable(),
'age' => FluentRule::integer()->min(18)->max(99),
];
# Валідація вкладених масивів
Пакет спрощує роботу зі складними структурами даних завдяки методам each() та children(). Це дозволяє описувати правила відповідно до архітектури масиву, уникаючи громіздкої крапкової нотації (dot-notation):
'items' => FluentRule::array()->required()->min(1)->each(
FluentRule::children([
'id' => FluentRule::integer()->required()->exists('products', 'id'),
'quantity' => FluentRule::integer()->required()->min(1),
])
),
# Оптимізація продуктивності
Окрім зручного синтаксису, пакет пропонує кілька технічних покращень:
- Оптимізація O(n): для великих вкладених масивів використовується алгоритм розширення масок, який працює значно швидше за стандартний підхід Laravel O(n²).
- Fast-Check Closures: популярні правила компілюються у PHP-замикання, що дозволяє валідатору оминати зайві витрати ресурсів основного рушія.
- Групування запитів до БД: правила
existsтаuniqueдля масивів автоматично об’єднуються в один запитwhereIn, що суттєво знижує навантаження на базу даних.
# Інтегровані повідомлення та мітки
Зрозумілі назви полів (labels) та кастомні повідомлення про помилки можна вказувати безпосередньо в ланцюжку правил. Це позбавляє необхідності створювати окремі масиви attributes() або messages() у Form Requests:
'email' => FluentRule::string()
->email()
->label('Email Address')
->message('Please provide a valid business email.', 'email'),
# Встановлення
Встановити пакет можна через Composer:
composer require sandermuller/laravel-fluent-validation
Пакет вимагає PHP 8.2+ та Laravel 11.0 або вище. Також передбачені спеціальні трейти для інтеграції з проєктами на Livewire та Filament.
Дізнатися більше та переглянути повну документацію можна на GitHub.