经过长时间的搜索,没有明确的解决方案,我需要你的建议:
我试图做一个这个http://symfony.com/doc/current/validation.html#getters的例子,但我不明白该怎么做。
我低估了我必须在执行验证的实体中有一个方法,在示例中是isPasswordLegal()。但什么时候被称为?。
此文档是否说我可以制作注释:
@Assert\isPasswordLegal()
或
@Assert\isTrue(isPasswordLegal)
密码属性中的?。
我也读过这个http://symfony.com/doc/current/reference/constraints/IsTrue.html但是,就像上面提到的链接一样,这些例子都是一样的,没有给我一些线索。
提前致谢。
答案 0 :(得分:2)
两者都没有。让我们来看看这个例子。
use Symfony\Component\Validator\Constraints as Assert;
/**
* @Assert\IsTrue(message = "The password must be valid")
*/
public function isPasswordLegal()
{
// ... return true or false
}
@Assert\IsTrue()
语句不是指类中的另一个方法。 该声明指的是注释的直接方法。
在这种情况下,function isPasswordLegal
直接位于注释下,因此Assert\IsTrue()
将验证isPasswordLegal
是否返回true
。如果它没有返回true,则会触发错误。
让我们用它来完成这个例子。
use Symfony\Component\Validator\Constraints as Assert;
/**
* @Assert\IsTrue(message = "The password must be valid!")
*/
public function isPasswordLegal()
{
$password = $this->password;
if($password !== "invalidPassword" && $password !== "anotherInvalidPassword"){
return true;
}
else{
return false;
}
}
编辑:在评论中回答澄清请求:
Assert
注释适用于其下的方法。该方法可以验证您想要的任何内容。检查密码取决于该方法。该方法的名称无关紧要,这只是惯例。
当您刷新实体或验证相关表单时,将发生此验证。