Bonjour,
J'essaie d'implémenter une règle de validation personnalisée. La validation nécéssite un accès à la base de données, je définis donc mon validateur comme service dans le services.yml.
Quand je soumets le formulaire qui contient cette règle de validation, j'obtiens cette erreur:
1 | Warning: Missing argument 1 for AppBundle\Validator\NotJunkEmailValidator::__construct(), called in C:\...\vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle\Validator\ConstraintValidatorFactory.php on line 71 and defined |
Les classes de contrainte et de validateur sont visiblement bien trouvées, mais le système d'injection de dépendances de symfony ne semble pas transmettre doctrine au constructeur. Je ne comprends pas pourquoi. Qu'ais-je fait de faux ou que me manque-t-il ? A toutes fins utiles j'ai vidé le cache dev mais ça n'a rien changé.
JE pense pourtant avoir suivi au plus près ce qui est indiqué dans le cookbook ici: http://symfony.com/doc/current/validation/custom_constraint.html
Mon code est ci-dessous. Merci pour vos réponses.
La déclaration du service:
1 2 3 4 5 | #app/config/services.yml validator.junkEmail: class: AppBundle\Validator\NotJunkEmailValidator arguments: ['@doctrine'] tags: [{ name: validator.constraint_validator }] |
La classe de contrainte:
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php // src/AppBundle/Validator/NotJunkEmail.php namespace AppBundle\Validator; use Symfony\Component\Validator\Constraint; /** *@Annotation */ class NotJunkEmail extends Constraint { public $message = "JunkEmailNotAllowed"; public $entity; public $field; } |
Le validateur:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php // src/AppBundle/Validator/NoJunkEmailValidator.php namespace AppBundle\Validator; use Symfony\Component\Validator\Constraint; use Symfony\Component\Validator\ConstraintValidator; class NotJunkEmailValidator extends ConstraintValidator { private $doctrine; public function __construct ($d) { parent::__construct(); $this->doctrine=$d; } public function validate ($value, Constraint $constraint) { //... } } |
Extrait de l'entité utilisant ce validateur:
1 2 3 4 5 6 7 8 9 10 11 12 | <?php use AppBundle\Validator as Validator; //... /** *@ORM\Column(type="string") *@Assert\NotBlank *@Assert\Email *@Validator\NotJunkEmail(entity=JunkEmailDomain::class, field="domain") */ public $email; |