似乎不可能使用SymfonyComponentValidatorConstraintsLessThan
约束来验证一个简单的值。
这里有一个简单的测试:
$lessConstraint = new LessThan();
$lessConstraint->value = 5;
$errors[] = $this->get('validator')->validateValue('This must fail.', $lessConstraint);
var_dump($errors);
由于测试的字符串超过5个字符,我预计会出现约束冲突。但是,结果是一个空的ConstraintViolationList
列表:
array(1) { [0]=> object(SymfonyComponentValidatorConstraintViolationList)#517 (1) { ["violations":"SymfonyComponentValidatorConstraintViolationList":private]=> array(0) { } } }
SymfonyComponentValidatorConstraintsLessThanOrEqual
约束也存在同样的问题。然而,如文档中所示,它与SymfonyComponentValidatorConstraintsEmail
约束完美配合:如果字符串不是电子邮件,我会得到一个错误。
我犯了什么错?
这是意料之中的事。
我确信您应该使用Range
约束。那么这里发生了什么呢?
根据LessThanValidator
源文件(此处),只需在左右操作数上使用<
运算符即可进行比较。
现在,如果你查阅PHP
关于类型比较的参考文献(这里),就会发现:
如果将数字与字符串进行比较,或者比较涉及数字字符串,然后将每个字符串转换为一个数字数值比较
所以,话虽如此,你应该这样做:
$lessConstraint = new Range();
$lessConstraint->max = 5;
$errors[] = $this->get('validator')->validateValue('This must fail.', $lessConstraint);
var_dump($errors);
就是这样。希望这能有所帮助。。。