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


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 ?

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 ^^'.

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 :/

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