尝试验证一个字段是否为空(长度> 0),然后验证字段的长度必须是一定长度(2个字符)。它似乎是一个" Assert \ Expression"可能在这种情况下工作,但我很难找到属性的长度。好像你不能在Expression中调用php函数。 expression documentation提到函数,但也许我不明白......我是否需要注册我自己的函数,只返回strlen()
。如果是这样,你如何注册自己的功能?有人可以解释是否有办法做到这一点,或者可能有比使用我正在忽略的表达式更好的方法......
/**
* @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
答案 0 :(得分:1)
看起来您需要注册自己的功能。请查看文档:{{3}}
lowercase
上有一个示例,strlen
应该非常相似。
修改强>:
您也可以使用回调验证器。
/**
* @Assert\Callback()
*/
public function validateState(ExecutionContextInterface $context)
{
if (!empty($this->plate) && mb_strlen($this->state) !== 2) {
$context->buildViolation('State must be 2 characters long')
->atPath('state')
->addViolation();
}
}
但是如果您打算在多个地方使用这种验证,您可以编写并注册自己的验证器。