我正在尝试使用Symfony的验证约束NotEqualTo
来防止使用某些字符串值。
正如documentation所述,使用NotEqualTo约束应该可以做到这一点。 这是有效的,尽管以区分大小写的方式进行。但是,我将需要它以不区分大小写的方式工作。 我可以通过创建自定义约束来解决此问题,但也许我只是忽略了一个更为简单的解决方案。
class Foo
{
/**
* @Assert\Length(
* min=4,
* max=150
* )
* @Assert\NotEqualTo(
* value="bar"
* )
*/
private $name;
}
在此示例中,保留关键字为bar
。
Symfony不允许bar
,但允许Bar
,BAR
,BaR
,...
我可以以不区分大小写的方式使用Symfony的验证约束NotEqualTo
吗?
答案 0 :(得分:1)
NotEqualTo
通过!=
比较其值。自'bar' != 'BAR'
起,您就无法解决它。
但是,您可能可以通过回调函数轻松地添加验证来比较两个值的小写版本。或者您可以编写自己的约束和验证器:https://symfony.com/doc/current/validation/custom_constraint.html
您可能想扩展Symfony/Component/Validator/AbstractComparison(已经提供了“值”属性/属性)和相应的验证器。
本着完全公开的精神:OP找到了解决其问题的更好方法:使用内置的Regex约束(请参见下面的答案)。
答案 1 :(得分:1)
NotEqualTo
无法做到这一点,如前所述。
解决问题的一种简单方法是使用字符串约束中的Regex
/**
* @Assert\Regex(
* pattern="/^(bar)$/i",
* match=false,
* message="'Bar' is a reserved name",
* )
*/
private $name;
也可以创建自己的自定义约束。但是我觉得编写代码并不安全。