Custom constraints and validator, but [ERROR] No constraint validator exists

I am trying to create my own service with a custom constraint and its validator.

MailAlert object:

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Validator\Constraints as Assert;
use AppBundle\Validator\AntiBadMail;

/**
 * MailAlert
 *
 * @ORM\Table(name="mail_alert")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\MailAlertRepository")
 * @UniqueEntity(fields="mail", message="Cette adresse a déjà été enregistrée.") 
 */
class MailAlert
{
    /**
     * @var string
     *
     * @ORM\Column(name="Mail", type="string", length=255)
     * @Assert\Email
     * @AntiBadMail()
     */
    private $mail;
}

      

AntiBadMail limitation:

namespace AppBundle\Validator;

use Symfony\Component\Validator\Constraint;

/**
 * @Annotation 
 */
class AntiBadMail extends Constraint
{
    public function validatedBy()
    {
        return 'app.validator_antibadmail'; // Ici, on fait appel au service
    }
}

      

AntiBadMailValidator:

namespace AppBundle\Validator;

use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;

class AntiBadMailValidator 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)
    {
        $request = $this->requestStack->getCurrentRequest();

        $mail = $request->request->all()['form']['mail'];
        $listPiecesOfMail = explode("@", $mail);

        $mailBefore = $listPiecesOfMail[0];
        $mailAfter = $listPiecesOfMail[1];

        $ListAcceptedMails = $this->container->getParameters('listAcceptedMails');

        if(count($mailBefore)<3){
            $this->context->addViolation($constraint->messageBefore);
        }

        if(!preg_match('#'.implode('|',$ListAcceptedMails).'#', $mailAfter)){
            $this->context->addViolation($constraint->messageAfter);
        }
    }
}

      

Service configuration:

app.validator_antibadmail:
      class: AppBundle\Validator\AntiBadMailValidator
      arguments: 
          - "@request_stack"
          - "@doctrine.orm.entity_manager"

      

I do not know why, but I am getting an error than my validator does not exist. I use validatedBy()

and give it my own name.

I'm lost. Could you help me?

EDIT: This is the error:

The constraint validator "app.validator_antibadmail" does not exist or is not included. Check the validatedBy method in the "AppBundle \ Validator \ AntiBadMail" constraint class.

+3


source to share


1 answer


Up! I used @ Asserts / Email to complete, but if anyone has an idea I'm ready!



0


source







All Articles