【问题标题】:Symfony 3 / Doctrine 2: Why my validator skipped?Symfony 3 / Doctrine 2:为什么我的验证器跳过了?
【发布时间】:2016-07-13 05:32:33
【问题描述】:

我想使用回调验证器和/或 getter,但在简单实体中都跳过了:

AppBundle/Entity/Page.php:

public static function loadValidatorMetadata(ClassMetadata $metadata)
{      
    $metadata->addConstraint(new Assert\Callback('validate'));

     $metadata->addGetterConstraint('passwordLegal', new Assert\IsTrue(array(
        'message' => 'The password cannot match your first name',
    )));

}

public static function validate($object, ExecutionContextInterface $context)
{
    die('validate');
}

public function isPasswordLegal()
{
    die('isPasswordLegal');
}   

loadValidatorMetadata 已执行,但 validateisPasswordLegal 未执行。为什么?验证已启用。

config.yml:

validation:      { enabled: true, enable_annotations: true }

我尝试了validation.yml:

AppBundle\Entity\Page:
constraints:
    - Callback: [validate]

谢谢。

【问题讨论】:

  • 你是如何触发验证的?表格提交?证实?保存实体?
  • 使用 Doctrine 实体提交表单

标签: php validation doctrine-orm symfony


【解决方案1】:

我发现自己有一个工作代码:

 public static function loadValidatorMetadata(ClassMetadata $metadata)
{
    $callback = function ($object, ExecutionContextInterface $context) {
       $context->buildViolation($object->getTemplate().' sounds totally fake!')
        //->atPath('template')  //Global or Field error
        ->addViolation();
    };

    $metadata->addConstraint(new Assert\Callback($callback));
}

将其放入实体中:Yourbundle/Entity/EntityName.php

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 2023-03-09
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 2011-11-27
    相关资源
    最近更新 更多