【发布时间】:2018-07-30 16:04:26
【问题描述】:
我有两个实体类:
class A {
/**
* @Assert\LessThanOrEqual(3)
*
* @var int
*/
protected $attempts;
}
class B extends A {
/**
* @Assert\LessThanOrEqual(5)
*
* @var int
*/
protected $attempts;
}
并进行 1 次测试以检查验证是否正常工作:
public function testSetAttemptsCount()
{
$block = new B();
$block->setAttempts(6);
$errors = $this->getService('validator')->validate($block);
$this->assertHasViolation($errors, 'attempts', LessThanOrEqual::TOO_HIGH_ERROR);
$block->setAttempts(4);
$errors = $this->getService('validator')->validate($block);
$this->assertNotHasViolation($errors, 'attempts', LessThanOrEqual::TOO_HIGH_ERROR);
}
此测试不会通过,因为它验证了来自 A 类的断言值。 有人知道如何“重写”字段的验证规则吗?
【问题讨论】:
-
有趣...有人会说它应该像这样工作。会关注这个。
-
确实很有趣...我可以确认这是
v4.1中的当前行为,并且在挖掘文档以找到一些线索时,我在 GitHub 上发现了一个问题 (@987654321 @) 和 Fabien 的提交 (github.com/symfony/symfony/pull/21053) 指向这个方向。似乎它已在2.7中修复,但不久后由于 BC 破损而恢复... :( -
确实很有趣。一种方法是从 A 类中生成 C 类,并创建一个由 B 和 C 扩展的抽象类 A。但这并不能回答问题。
-
对不起,错误的问题链接。正确的是:github.com/symfony/symfony/issues/15950