dongroufan6846 2017-07-27 13:28
浏览 65

自定义约束和验证器但[ERROR]约束验证器不存在

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

MailAlert Entity:

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

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 don't know why but I get the error than my validator doesn't exist. I use the validatedBy(), and give it the proper name.

I am lost. Can you help me ?

EDIT : This is the error :

Constraint validator "app.validator_antibadmail" does not exist or it is not enabled. Check the "validatedBy" method in your constraint class "AppBundle\Validator\AntiBadMail".

  • 写回答

2条回答 默认 最新

  • dora0817 2017-07-31 14:10
    关注

    Up ! I used the @Asserts/Email to finish, but if somebody have an idea, i am ready !

    评论

报告相同问题?

悬赏问题

  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?