Большинство PHP-разработчиков используют
Validator в Symfony исключительно для проверки сущностей, связанных с формами. Но этот компонент — гораздо мощнее, чем просто NotBlank и Email.🔍 В статье автор показывает, как Validator помогает строить устойчивые API и гибкие правила валидации, не завязанные на базу данных.
🧩 1. DTO вместо Entity
Антипаттерн — принимать в контроллере
Entity.Лучше использовать DTO:
🔒 безопасно (нет mass assignment),
🧠 понятно (чёткий контракт API),
🧱 независимо (никакой связи с ORM).
#[Assert\NotBlank]
#[Assert\Email]
public readonly ?string $email;
⚙️ 2. Динамическая валидация с Group Sequences
Хочешь, чтобы обязательные поля менялись в зависимости от условий?
Используй
GroupSequenceProvider:например, если тип аккаунта
corporate — проверяй companyName, если individual — игнорируй.🧬 3. Проверка вложенных структур
С
#[Valid] можно валидировать коллекции DTO:
#[Assert\Valid]
public array $items = [];
А с
#[Collection] — ассоциативные массивы и JSON-payload’ы.🧠 4. Свои Constraints с DI
Нужна валидация с доступом к базе или API?
Создай свой
ConstraintValidator, инжектни EntityManager или сервис и пиши логику вроде:
if ($repository->findOneBy([$field => $value])) {
$this->context->buildViolation('Already in use')->addViolation();
}
Validator в Symfony — это не просто про формы.
Это способ держать бизнес-инварианты в чистом, расширяемом и декларативном виде.
🧠 Применяйте его для DTO, API, микросервисов и любых сложных структур.
Код станет чище, а валидация — надёжнее.
👉 Читать полностью
Библиотека пхпшника