Symfony验证:介于两个数字或一个值之间的范围
我想验证一个介于10和20之间、30和40之间或等于99的数字 我可以想象代码与此类似,但它不起作用: 在Entity\NameOfFile.php中:Symfony验证:介于两个数字或一个值之间的范围,symfony,validation,Symfony,Validation,我想验证一个介于10和20之间、30和40之间或等于99的数字 我可以想象代码与此类似,但它不起作用: 在Entity\NameOfFile.php中: /* * @Assert\Range( * min=10, * max=20 * ) * * @Assert\Range( * min=30, * max=40 * ) * * @Assert\IdenticalTo(value = 99) */ private $myVariable; 或者类似的事情:
/*
* @Assert\Range(
* min=10,
* max=20
* )
*
* @Assert\Range(
* min=30,
* max=40
* )
*
* @Assert\IdenticalTo(value = 99)
*/
private $myVariable;
或者类似的事情:
/*
* @Assert\Choice({
* Range({min = 10, max = 20}),
* Range({min = 10, max = 20}),
* 99
* )}
*/
private $myVariable;
我还添加了最小和最大消息
在第一个选项中,显然只考虑第一个断言,而忽略第二个断言。第二个选项根本不起作用
请给我一个没有正则表达式的解决方案
编辑:
根据M Khalid Juanid的建议,代码如下所示:
/**
* @Assert\Expression(
* "this.getmyVariable() in 10..20 or this.getmyVariable() in 30..40 or this.getmyVariable() == 99",
* message="Your error message", groups{"groupA"}
* )
*private $myVariable;
*/
***
if($appendForm->isValid(array($groupA))
{
***
}
它工作正常,但仅当验证未分配给groupA时。在这种情况下,如何将验证分配给组?您可以将其用于多个标准
/**
* @Assert\Expression(
* "this.checkRange()",
* message="Your error message"
* )
*/
class YourEntityName
{
public function checkRange(){
if(
($this->yourPorperty >= 10 && $this->yourPorperty <= 20)
|| ($this->yourPorperty >= 30 && $this->yourPorperty <= 40)
|| ($this->yourPorperty == 90)
){
return true;
}
return false;
}
}
可以使用自定义验证约束。要创建一个,您可以参考官方文档:
您必须将所有约束放在Validator类的
validate
函数中。自Symfony 5.1以来,有一个新的验证器可以检查是否满足多个约束中的至少一个。
您需要
this.getYourPorperty()
在这里而不是this.yourPorperty
谢谢您的回答!它很好用。但是如何将此验证分配给组?我把新代码放到帖子上。@BabyWebnaster在FooFormType.php
/**
* @Assert\Expression(
* "this.getYourPorperty() in 10..20 or this.getYourPorperty() in 30..40 or this.getYourPorperty() == 90",
* message="Your error message"
* )
*/
/**
* @Assert\AtLeastOneOf({
* @Assert\Range(
* min=10,
* max=20
* ),
* @Assert\Range(
* min=30,
* max=40
* ),
* @Assert\IdenticalTo(value = 99)
* })
*/
private $myVariable;