gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 21:50:18 25 4
gpt4 key购买 nike

我正在尝试使用自定义约束及其验证器创建我自己的服务。

MailAlert 实体:

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 约束:

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);
}
}
}

服务配置:

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

我不知道为什么,但我得到的错误是我的验证器不存在。我使用 validatedBy(),并为其指定正确的名称。

我迷路了。你能帮助我吗 ?

编辑:这是错误:

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

最佳答案

对于仍然面临此问题的任何人,这就是您使用 Symfony 3.4 配置验证器服务的方式:

AppBundle\Validator\Constraints\CustomValidator:
public: true
class: AppBundle\Validator\Constraints\CustomValidator
autowire: true
tags: [{ name: validator.constraint_validator, alias: app.validator.custom }]

其他一切都应该按照问题中的描述完成。

关于php - 自定义约束和验证器但 [ERROR] 约束验证器不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45352254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com