实体getter中的symfony 3.1验证

时间:2016-08-14 12:20:27

标签: symfony

经过长时间的搜索,没有明确的解决方案,我需要你的建议:

我试图做一个这个http://symfony.com/doc/current/validation.html#getters的例子,但我不明白该怎么做。

我低估了我必须在执行验证的实体中有一个方法,在示例中是isPasswordLegal()。但什么时候被称为?。

此文档是否说我可以制作注释:

@Assert\isPasswordLegal()

@Assert\isTrue(isPasswordLegal)
密码属性中的

?。

我也读过这个http://symfony.com/doc/current/reference/constraints/IsTrue.html但是,就像上面提到的链接一样,这些例子都是一样的,没有给我一些线索。

提前致谢。

1 个答案:

答案 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 注释适用于其下的方法。该方法可以验证您想要的任何内容。检查密码取决于该方法。该方法的名称无关紧要,这只是惯例。

当您刷新实体或验证相关表单时,将发生此验证。