gpt4 book ai didi

php - Symfony/验证器 : Property validation in Callback

转载 作者:可可西里 更新时间:2023-10-31 23:38:29 28 4
gpt4 key购买 nike

我正在尝试创建一个地址实体,其中包含根据给定国家/地区验证的邮政编码。要走的路显然是 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 .

最佳答案

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

/**
* @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]);
}

关于php - Symfony/验证器 : Property validation in Callback,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34253540/

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