【问题标题】:Symfony/Validator: Property validation in CallbackSymfony/Validator:回调中的属性验证
【发布时间】:2016-03-19 03:17:42
【问题描述】:

我正在尝试使用基于给定国家/地区验证的邮政编码创建地址实体。要走的路显然是 CallbackValidator。现在我有这个代码:

use SLLH\IsoCodesValidator\Constraints\ZipCode;
use Symfony\Component\Validator\Constraints\Callback;
use Symfony\Component\Validator\Context\ExecutionContextInterface;

class Address
{
    /**
     * @Callback()
     */
    public function validatePostalCode(ExecutionContextInterface $context)
    {
        $constraint = new ZipCode([ 'country' => $this->country ]);
        $violations = $context->getValidator()->validate($this->postalCode, $constraint);

        foreach ($violations as $violation) {
            $context->getViolations()->add($violation);
        }
    }
}

这样做的问题是违规没有正确的路径。我不知道如何设置它。 $context->buildViolation($violation->getMessage()) 也不好,因为我必须手动复制违规可能具有的所有属性。

编辑:我试过了,确实是very ugly

【问题讨论】:

    标签: php validation symfony


    【解决方案1】:

    这似乎有效。关键是,如果您使用上下文验证器,您实际上可以指定验证路径。此外,您不需要复制违规行为,因为它们直接添加到预期的上下文中。

    /**
     * @Callback()
     */
    public function validatePostalCode(ExecutionContextInterface $context)
    {
        $constraint = new ZipCode([ 'country' => $this->country ]);
        $validator = $context->getValidator()->inContext($context);
        $validator->atPath('postalCode')->validate($this->postalCode, $constraint, [Constraint::DEFAULT_GROUP]);
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 1970-01-01
      • 2018-02-22
      • 1970-01-01
      • 2013-07-11
      • 1970-01-01
      • 2015-05-16
      • 2012-12-23
      • 1970-01-01
      相关资源
      最近更新 更多