gpt4 book ai didi

php - Symfony2 - 在自定义验证器中调用 EmailValidator

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:03:03 24 4
gpt4 key购买 nike

我正在创建自定义验证器约束来验证“联系人”,类似于“John Doe ”。关注 Cookbook我已经创建了约束类:

<?php

namespace MyCompany\MyBundle\Validator\Constraints;

use Symfony\Component\Validator\Constraint;

/**
* @Annotation
*/
class Contact extends Constraint
{
public $message = 'The string "%string%" is not a valid Contact.';
}

并且还创建了验证器:

<?php

namespace MyCompany\MyBundle\Validator\Constraints;

use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
use Symfony\Component\Validator\Constraints\Email;
use Symfony\Component\Validator\Constraints\EmailValidator;

class ContactValidator extends ConstraintValidator
{
public function validate($value, Constraint $constraint)
{
if (!preg_match('#(.*)\s+<(.*)>#', $value, $matches)) {
$this->context->addViolation($constraint->message, array('%string%' => $value));
}

$emailValidator = new EmailValidator();
if (isset($matches[2]) && $emailValidator->validate($matches[2], new Email())) {
$this->context->addViolation($constraint->message, array('%string%' => $value));
}
}
}

重点是我正在尝试在我的自定义验证器中使用 Symfony 的 EmailValidator 来检查电子邮件是否有效。我不想重新发明轮子并使用我自己的正则表达式验证电子邮件。

尝试验证有效联系人时一切正常,但使用无效电子邮件(“Gabriel Garcia ”)测试联系人时,会出现 PHP fatal error :

Fatal error: Call to a member function addViolation() on a non-object in /home/dev/myproject/vendor/symfony/symfony/src/Symfony/Component/Validator/Constraints/EmailValidator.php on line 58

深入研究 EmailValidator.php 类,我意识到问题与 $context (ExecutionContext) 有关。这是 EmailValidator.php 的第 58 行:

$this->context->addViolation($constraint->message, array('{{ value }}' => $value));

似乎该类的上下文属性为空。任何人都知道为什么?我需要将它注入(inject)某处吗?

提前致谢。

附注:我使用的是 Symfony 2.3。不要注意正则表达式,我知道它可以好得多。现在仅用于测试。

最佳答案

我认为最初的问题是关于在自定义验证器中使用 EmailValidator 并且在这种情况下容器不可用,所以

$this->get('validator');

将不起作用。似乎张贴者遇到的唯一问题是将 EmailValidator addViolation 添加到正确的上下文中。这应该有效:

$emailValidator = new EmailValidator();
$emailValidator->initialize($this->context);
$emailValidator->validate($matches[2], $constraint);

关于php - Symfony2 - 在自定义验证器中调用 EmailValidator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17337427/

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