Symfony2表单集合不检查id

时间:2014-07-05 19:36:53

标签: forms rest symfony collections

我不知道这是一个配置问题还是按照预期的方式工作,我没有正确使用它。但是当我向实体A发送包含实体B集合的PUT请求时,方法绑定尝试覆盖实体B的属性。

示例:

获取实体A:

{ 
  id : 1,
  name : "test",
  collection : [
      0 : { id : 2, name : "Entity B - 2", line : 0, property : "stuff" },
      1 : { id : 3, name : "Entity B - 3", line : 1  }
  ]
 }

PUT实体A :(从集合中删除了实体B id 2)

{ 
  id : 1,
  name : "test",
  collection : [
      0 : { id : 3, name : "Entity B - 3", line : 0 }
  ]
 }

结果:

{ 
  id : 1,
  name : "test",
  collection : [
      0 : { id : 2, name : "Entity B - 3", line : 0, property : "stuff" }
  ]
 }

配置:

EntityA

     /**
     * @ORM\OrderBy({"line" = "ASC"})
     * @ORM\OneToMany(targetEntity="entityB", mappedBy="entityA", cascade= { "persist", "remove"})
     */
     private $collection;

     public function addCollection($entityB)
     {
          $this->collection[] = $entityB;
          $lines->setEntityA($this);

          return $this;
      }

     public function removeCollection($entityB)
     {
         $this->collection->removeElement($entityB);
         $lines->setEntityA(null);
      }

EntityB

     /**
      * 
      * @ORM\ManyToOne(targetEntity="entityA", inversedBy="collection")
      */
      private $entityA;

控制器

    $form = $this->createForm(new $entityAType(), $entity);
    $form->bind($request);

    if ($form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $em->persist($entity);
        $em->flush();
    }

表格

    ->add('collection', 'collection', array(
                                        "type" => new entityBType,
                                        'allow_add' => true,
                                        'allow_delete' => true,
                                        'by_reference' => false,
                                        'cascade_validation' => true,
                                    ))

1 个答案:

答案 0 :(得分:0)

我通过使用一个事件监听器来解决我的问题,该监听器将表格子项重新排序以匹配resquest的ID。