spiral-packages/symfony-validator
Symfony Validator bridge for the Spiral Framework. Integrates Symfony’s validation component into Spiral apps, providing familiar constraints and error handling. Includes CI, static analysis, and type coverage. Documentation available at spiral.dev.
@Assert\All, @Assert\Json) and performance optimizations (e.g., constraint compilation improvements), which may benefit Spiral projects requiring advanced validation logic.array<string>) may require Spiral-specific type adaptations.symfony/validator) can upgrade seamlessly. No breaking changes in Spiral’s integration layer, but custom constraints using Symfony 6.x APIs may need updates.ValidatorBuilder) are only available in 1.5.0+. Projects must explicitly opt into Symfony 7.0 via composer.json constraints.Spiral\Middleware).ValidatorInterface with Spiral’s event system.@Assert\Callback) may have deprecated methods or renamed classes in 7.0. Audit custom constraints.array<int, string>) could cause type errors in Spiral’s loosely typed services.Cache system.symfony/property-info). Evaluate if alternatives (e.g., spatie/laravel-validation) are viable for lightweight projects.spiral/orm if using Doctrine).strict_types=1 in PHP.ConstraintViolationListInterface changes) require updates to Spiral’s error serialization (e.g., JSON API responses)?composer.json to require symfony/validator:^7.0 and spiral-packages/symfony-validator:^1.5.0.@Assert\Json) if needed:
# config/validator.yaml
Spiral\Validator\SymfonyValidator:
constraints:
- '@Assert\Json' # Symfony 7.0+ constraint
groups: [default]
Provider to bind Symfony’s ValidatorInterface:
use Symfony\Component\Validator\ValidatorInterface;
use Spiral\Validator\SymfonyValidator;
class ValidatorProvider extends Provider {
public function define(): array {
return [
ValidatorInterface::class => SymfonyValidator::class,
];
}
}
Phase 1: Dependency Update
composer require symfony/validator:^7.0 spiral-packages/symfony-validator:^1.5.0
spiral/orm).Phase 2: Constraint Audit
@Assert\Callback, ensure the callback signature matches Symfony 7.0’s expectations.Phase 3: Configuration Sync
validator.yaml to Symfony 7.0’s format (e.g., new constraint options).# Symfony 7.0+ supports nested constraints
Spiral\Validator\SymfonyValidator:
constraints:
- { name: 'App\Entity\User', constraints: [{ name: 'NotBlank' }] }
Phase 4: Testing
ValidatorTestCase or adapt Spiral’s TestCase:
use Symfony\Component\Validator\Test\ConstraintValidatorTests;
use Spiral\Test\TestCase;
class UserValidatorTest extends TestCase {
use ConstraintValidatorTests;
// ...
}
composer.json for PHP 8.1+).symfony/validator:^6.4 and avoid 7.0-specific features.ValidatorMiddleware may not integrate cleanly with Spiral’s Middleware pipeline. Use a custom decorator:
use Spiral\Middleware\MiddlewareInterface;
use Symfony\Component\Validator\ValidatorInterface;
class ValidateMiddleware implements MiddlewareInterface {
public function __construct(private ValidatorInterface $validator) {}
public function __invoke($request, callable $handler) {
$data = $request->getData();
$errors = $this->validator->validate($data);
if ($errors->count()) { throw new ValidationException($errors); }
return $handler($request);
}
}
ValidatorEvent may require Spiral-specific event listeners.use Spiral\Cache\CacheInterface;
class CachedValidator {
public function __construct(
private ValidatorInterface $validator,
private CacheInterface $cache
) {}
public function validate($data) {
$key = md5(serialize($data));
return $this->cache->get($key, fn() => $this->validator->validate($data));
}
}
symfony/validator:^7.0.0 to avoid auto-upgrades to 8How can I help you explore Laravel packages today?