【问题标题】:Symfony2 and loadValidatorMetadata - access Entity valuesSymfony2 和 loadValidatorMetadata - 访问实体值
【发布时间】:2013-07-12 13:28:05
【问题描述】:

我有一个自定义验证器,我想从验证器访问整个实体。

我找到了 Class Constraint Validator http://symfony.com/doc/current/cookbook/validation/custom_constraint.html#class-constraint-validator 但我不知道如何使用它。

在哪里设置验证器,目前我是这样的:

$metadata->addPropertyConstraint('doi', new IsDOI());

但是这个si只针对参数,不针对整个类。 我真的无法理解 symfony 的例子。

【问题讨论】:

  • 你的问题是什么,你不明白什么?
  • 我的问题是:如何从验证器类中访问其他一些实体值。问题是我不知道在哪里设置验证以便能够访问其他实体值

标签: php validation symfony


【解决方案1】:

如果我们不能在注释中做到这一点:

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Knp\DoctrineBehaviors\Model as ORMBehaviors;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Mapping\ClassMetadata;

/*
* Project
* @ORM\Entity(repositoryClass="ProjectRepository")
*/
class Project
{
use ORMBehaviors\Translatable\Translatable;

/*
* =>  @ Assert\Valid not working on $translations, since tranlastion already defined by ORMBehaviors trait
*/
public static function loadValidatorMetadata(ClassMetadata $metadata)
{
    //$metadata->addConstraint(new Assert\Valid());
    $metadata->addPropertyConstraint('translations', new Assert\Valid());
}

【讨论】:

    【解决方案2】:

    搞定了,我唯一需要做的就是在实体类的顶部设置验证器:

     /**
     * Manuscript
     *
     * @IsDOI()
     * @ORM\Table(name="manuscripts")
     * @ORM\Entity
     * @ORM\HasLifecycleCallbacks
     * 
     */
    class Manuscript
    {...}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-02
      • 1970-01-01
      • 2012-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-07
      相关资源
      最近更新 更多