我正在编写一个 REST API,我的问题是当我想反序列化与其他实体具有一对多关系的实体中的请求时,因为当我想要持久化对象而不是现有的“子”时,Doctrine创建一个新的并将他分配给该对象。
这是一个帖子示例:
{“类别”:{“id”:1},{“主题”:{“id”:1}}
我期望发生的是添加一个具有类别:1 和主题:1 的新频道,但学说创建了一个新的类别/主题。
我想做的是更改通过在自定义验证器中的 Doctrine 对象中使用 JMS Serializer 反序列化创建的类别/主题对象,
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 ?