尝试验证一个字段是否为空(长度> 0),则验证字段的长度必须为特定长度(2个字符)。这看起来像一个“断言\表达式”可能在这种情况下工作,但我无法找到属性的长度。看起来你不能在表达式中调用php函数。 expression documentation提到的功能,但也许我不明白它......我需要注册我自己的功能,只需返回strlen()
。如果是的话,你如何注册自己的功能?有人可以解释,如果有一种方法可以做到这一点,也许还有比使用,我俯瞰表达一个更好的办法...依赖于另一个属性的Symfony验证
/**
* @var string
*
* @ORM\Column(name="plate", type="string", length=10)
*/
private $plate;
/**
* @var string
*
* @ORM\Column(name="state", type="string", length=2)
* @Assert\Expression(
* "strlen(this.getPlate()) == 0 or (strlen(this.getPlate()) > 0 and strlen(value) == 2)",
* message="Must be 2 characters"
*)
*/
private $state;
在上述情况下,我得到一个错误The function "strlen" does not exist around position 1
http://symfony.com/doc/current/reference/constraints/Length.html – Cerad
所以,你想允许该字段为空,或者如果它不是空的,它必须有2个字符长度,对吗? – jkrnak
是的,但它依赖于其他属性“PLATE”...所以如果PLATE为空STATE也可以为空,但如果PLATE有任何东西(长度> 0),那么STATE的长度必须为2 – snoop168