【问题标题】:Synfony custom validator alter object value within validationSymfony 自定义验证器更改验证中的对象值
【发布时间】:2013-10-19 12:46:49
【问题描述】:

我正在编写一个 REST API,我的问题是当我想反序列化与其他实体具有一对多关系的实体中的请求时,因为当我想要持久化对象而不是 alocationg 现有的“子",Doctrine 创建了一个新对象并将其分配给对象。

这是一个帖子示例:

{“类别”:{“id”:1},{“主题”:{“id”:1}}

我期望发生的是添加一个具有类别:1 和主题:1 的新频道,但学说创建了一个新类别/主题。

我想要做的是更改通过在自定义验证器中的 Doctrine 对象中使用 JMS 序列化器反序列化创建的类别/主题对象,

class Channel
{

   /**
     * @ChoiceEntity(targetEntity="Bundle\ChannelBundle\Entity\ChannelCategory", allowNull=true)
     * @Type("Bundle\ChannelBundle\Entity\ChannelCategory")
     */   
    public $category;

   /**
     * @ChoiceEntity(targetEntity="Bundle\ChannelBundle\Entity\Theme", allowNull=true)
     * @Type("Bundle\ChannelBundle\Entity\Theme")
     */   
    public $theme;
}

这里是自定义验证器:

class ChoiceEntityValidator extends ConstraintValidator
{
    /**
     *
     * @var type 
     */
    private $entityManager;

    /**
     * 
     * @param type $entityManager
     */
    public function __construct($entityManager){
        $this->entityManager = $entityManager;       
    }

    /**
     * @param FormEvent $event
     */
    public function validate($object, Constraint $constraint)
    {
        if($constraint->getAllowNull() === TRUE && $object === NULL){//null allowed, and value is null
            return;
        }

        if($object === NULL || !is_object($object)) {
            return $this->context->addViolation($constraint->message);
        }

        if(!$this->entityManager->getRepository($constraint->getTargetEntity())->findOneById($object->getId())) {
            $this->context->addViolation($constraint->message);
        }       
    } 
}

那么有没有办法将自定义验证器中的 $object 更改为存储库结果中的值?

【问题讨论】:

    标签: php validation symfony doctrine-orm


    【解决方案1】:

    我认为在您的自定义验证器中编辑已验证的对象不是一个好主意。

    请记住,您添加的自定义验证器应该用于检查您的对象是否有效(取决于您的验证规则)。

    如果要编辑对象,则应在调用验证过程之前进行。您可能需要使用Data Transformers

    【讨论】:

    • 好点,我不知道数据转换器,这就是我想这样做的原因,尽管我知道这不是最佳实践,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    相关资源
    最近更新 更多