经过长时间的搜索但没有明确的解决方案后,我需要您的建议:
我正在尝试做一个例子 http://symfony.com/doc/current/validation.html#getters但我不明白该怎么做。
我轻描淡写地说,我必须在实体中拥有一个执行验证的方法,即示例中的 isPasswordLegal() 。但是什么时候调用呢?
这个文档是否说我可以做这样的注释:
@Assert\isPasswordLegal()
或
@Assert\isTrue(isPasswordLegal)
在密码属性中?.
我也读过这篇文章http://symfony.com/doc/current/reference/constraints/IsTrue.html但是,就像上面提到的链接一样,这些示例是相同的,但没有给我任何线索。
提前致谢。
最佳答案
都不是。让我们看一下示例。
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
注释适用于其下面的方法。该方法可以验证您想要的任何内容。由该方法来检查密码。 方法的名称无关,它只是约定。
此验证将在您刷新实体或验证关联表单时发生。
关于实体 getter 中的 symfony 3.1 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38942199/