symfony/validator
Symfony Validator provides a flexible validation system based on the JSR-303/Bean Validation model. Define constraints via annotations/attributes, YAML/XML, or PHP, validate objects and values, and get detailed, localized violation messages.
symfony/validator package adheres to JSR-303 Bean Validation, a standard widely adopted in PHP ecosystems. It integrates seamlessly with Laravel’s existing validation mechanisms (e.g., Validator facade) and can replace or augment Laravel’s built-in validation logic.ValidatorBuilder) for faster validation in production.Illuminate/Validation is built on top of Symfony’s validator, so adopting this package directly aligns with Symfony’s roadmap (e.g., PHP 8.4+ compatibility in v8.x).Validator facade already uses Symfony’s validator under the hood. Direct integration is possible with minimal changes.Validator::make($data, $rules) with ValidatorBuilder::create()->getValidator()->validate($data, $constraints).symfony/options-resolver, symfony/property-access). No conflicts with Laravel’s core.'email', 'required') can be mapped to Symfony’s constraints (e.g., Email, NotBlank) via custom constraint classes or validation groups.symfony/validator's YAML/XML mapping or attributes (PHP 8+) for declarative validation.GroupSequence). Requires migration effort if using older configurations.Constraint, ConstraintValidator). Mitigate with documentation and unit tests.ValidatorBuilder::create()->enableAnnotationMapping() for attribute-based validation (PHP 8+).Rule objects) be migrated to Symfony constraints?Default, Create, Update) be defined and reused across the application?Validator::make()) be adapted to use Symfony’s validator?ConstraintViolationList can be mapped to Laravel’s Validator::errors().Video, ExtendsValidationFor) be incorporated into the codebase?Illuminate/Validation is a wrapper around Symfony’s validator. Direct adoption reduces abstraction layers.ValidatorInterface for dependency injection.FormRequest or ApiResource for automatic validation.protected $rules in FormRequest with Symfony constraints via attributes or metadata.| Phase | Action Items | Tools/Dependencies |
|---|---|---|
| Assessment | Audit existing validation logic (e.g., Validator::make(), custom rules). |
PHPStan, Pest tests. |
| Pilot | Replace 1–2 critical validation use cases (e.g., user registration, API endpoints). | Symfony’s ValidatorBuilder, Laravel’s Validator facade. |
| Core Integration | Migrate FormRequest/ApiResource validation to Symfony constraints. |
PHP attributes (v8.x) or YAML/XML mapping. |
| Testing | Update unit/feature tests to use Symfony’s ConstraintViolationList. |
PestPHP, Laravel Dusk. |
| Deprecation | Phase out Laravel’s Rule objects in favor of Symfony constraints. |
Custom constraint classes. |
| Optimization | Enable compiled metadata for production. | ValidatorBuilder::enableAnnotationMapping(). |
| Laravel Rule | Symfony Constraint | Notes |
|---|---|---|
required |
NotBlank |
Use null for nullable fields. |
email |
Email |
Supports custom domains. |
min:5 |
Length(min=5) |
Supports min/max in error messages. |
unique:users,email |
UniqueEntity (Doctrine) |
Requires symfony/doctrine-bridge. |
| Custom rules | Custom Constraint class |
Extend AbstractConstraint. |
FormRequest/ApiResource validation first (high ROI, isolated scope).Rule objects to Symfony constraints (e.g., CustomRule::class → new CustomConstraint()).if (!$request->has('email'))) with Symfony’s validator.config/validator.php).Validator::make() in favor of dependency-injected ValidatorInterface.Email, Url validations).ConstraintValidator interfaces).symfony/validator:validate) for debugging.ConstraintViolation objects with property paths).App\Exceptions\Handler or via Sentry.How can I help you explore Laravel packages today?