avegao/spain-validator-bundle
Installation:
composer require avegao/spain-validator-bundle
Register the bundle in app/AppKernel.php:
new Xinjia\SpainValidatorBundle\XinjiaSpainValidatorBundle(),
First Use Case: Validate a DNI in a Symfony form or entity:
use Xinjia\SpainValidatorBundle\Validator as ExtraAssert;
/**
* @ExtraAssert\Dni(message="Invalid DNI")
*/
private $dni;
@ExtraAssert annotations in Doctrine entities.ValidatorInterface.// Entity class
use Xinjia\SpainValidatorBundle\Validator as ExtraAssert;
/**
* @ExtraAssert\ZipCode(message="Invalid Spanish postal code")
*/
private $postalCode;
// Controller
$form = $this->createFormBuilder()
->add('postalCode', TextType::class, [
'constraints' => new ZipCode(),
])
->getForm();
Validate fields programmatically in services:
use Xinjia\SpainValidatorBundle\Validator\Dni;
use Symfony\Component\Validator\Validator\ValidatorInterface;
$validator = $this->get('validator');
$errors = $validator->validate($dniValue, new Dni());
Use AllPhone for flexible phone validation (fixed/mobile):
$form->add('phone', TextType::class, [
'constraints' => [
new AllPhone(),
new Length(['max' => 9]),
],
]);
DniCif).translations or setMessage().Deprecated Bundle:
symfony/validator + custom rules).Namespace Mismatch:
Xinjia\SpainValidatorBundle, but composer points to avegao/spain-validator-bundle.use statements.Strict Validation:
ZipCode expects 5-digit Spanish postal codes (e.g., 28001). Rejects formats like 28001-MAD.trim() or regex) if needed.DNI/NIE/CIF Ambiguity:
DniCif validates both DNI and CIF but may not distinguish between them.Dni/Cif validators for clarity.Validator component logs for constraint failures.12345678A, 71234567Z (valid); 12345678 (invalid).B12345678 (valid); 123456789 (invalid).08001 (valid); 08001-BAR (invalid).Custom Rules:
Extend validators (e.g., add Nie support) by subclassing AbstractValidator:
class Nie extends AbstractValidator {
public function isValid($value, Constraint $constraint) {
// Custom NIE logic
}
}
Configuration:
Override default messages in config/validator/validation.yaml:
Xinjia\SpainValidatorBundle\Validator\Constraints\Dni:
message: "El DNI {{ value }} no es válido."
Performance: Cache validation results for repeated checks (e.g., in API rate-limited endpoints).
$dto = new UserDto($request->request->all());
$errors = $validator->validate($dto);
symfony/validator + custom rules.$validator = $this->createMock(ValidatorInterface::class);
$validator->method('validate')->willReturn([]);
$this->container->set('validator', $validator);
How can I help you explore Laravel packages today?