实体 getter 中的 symfony 3.1 验证

标签 symfony

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

我正在尝试做一个例子 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/

相关文章:

symfony - TWIG:大写使其他字母变小

php - Symfony - 使用注释指定服务不共享

npm - 如何在 Symfony 的 View 中引用 node_modules 组件

symfony - 如何使 Controller url 的缓存无效?

php - Doctrine 多对多关系

php - 奇怪的学说 EntityNotFoundException

php - Symfony:注销后如何显示成功消息

带路由的 Symfony2 访问控制

symfony - 如何从查询中获取总匹配

php - 如果 redis 不可用,Symfony SncRedis Bundle 异常处理