Argument de service non detecté

Par TransientDev, il y a 10 ans


Bonjour/Bonsoir,
je suis en train de me former a Symfony 2 et jusque là tout allait bien. Je viens d'attaquer la partie sur les validateurs personnels et j'essaie actuellement d'ajouter validateur au services.
Voici la définition du service:

td_platform.validator.antiflood: class: TD\PlatformBundle\Validator\AntifloodValidator arguments: [@request_stack, @doctrine.orm.entity_manager] tags: - { name: validator.constraint_validator, alias: td_platform_antiflood }

et mon validateur:

namespace TD\PlatformBundle\Validator; use Doctrine\ORM\EntityManagerInterface; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\Validator\Constraint; use Symfony\Component\Validator\ConstraintValidator; class AntifloodValidator extends ConstraintValidator { private $requestStack; private $em; public function __construct(RequestStack $requestStack, EntityManagerInterface $em) { $this->requestStack = $requestStack; $this->em = $em; } public function validate($value, Constraint $constraint) { // ... } }

Or lors du processus de validation j'obtiens cette erreur:

Catchable Fatal Error: Argument 1 passed to TD\PlatformBundle\Validator\AntifloodValidator::__construct() must be an instance of Symfony\Component\HttpFoundation\RequestStack, none given

Je ne vois pas où est mon erreur, si quelqu'un pouvait m'expliquer ce serait vraiment cool :).

Merci d'avance pour votre temps !

4 réponses

romainfan, il y a 10 ans

Bonjour.
Lorsque l'on créé son propre validateur, on créé deux classes :

  • une qui extend Symfony\Component\Validator\ConstraintValidator;
  • une autre qui extend use Symfony\Component\Validator\Constraint;

J'imagine que c'est bien ceci que tu as mis en place ?
Peux-tu donner le code de ta classe qui extend Symfony\Component\Validator\Constraint , afin que je puisse voir la définition de ta méthode validatedBy ?

TransientDev, il y a 10 ans

Bonjour,
c'est bien comme ça que j'ai procédé, voici ma Contrainte

namespace TD\PlatformBundle\Validator; use Symfony\Component\Validator\Constraint; /** * @Annotation */ class Antiflood extends Constraint { public $message = "vous ne pouvez pas flooder!"; public function validateBy() { return 'td_platform_antiflood'; } }

J'ai fait comme dans la documentation mais je n'ai pas pu ajouter de contrainte encore, comme jusque la ça ne fonctionne pas ^^'.

romainfan, il y a 10 ans

Problème de cache du dev (ou de prod) ? Supprime les fichiers, sait-on jamais.
Je ne vois pas sinon d'où ça peut venir :/

TransientDev, il y a 10 ans

J'y avait pensé mais rien n'y fait, je retenterais demain. Merci quand même :)