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