2016-09-06 20 views
2
私は Thingのリストを管理しようとしている

は、任意のThingname持っているとamount永続化:スタンドアロンCollectionTypeは(追加/削除)

エンティティ

class Thing 
{ 
    // ... 

    /** 
    * @var string 
    * 
    * @ORM\Column(type="string") 
    */ 
    private $name; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(type="integer") 
    */ 
    private $amount; 
} 

フォームを

class ThingFormType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('name') 
      ->add('amount') 
     ; 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver 
      ->setDefaults(array(
       'data_class' => Thing::class, 
      )) 
     ; 
    } 
} 

フォームコレクション

class ThingsFormType extends AbstractType 
{ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'entry_type' => ThingFormType::class, 
      'allow_delete' => true, 
      'allow_add' => true, 
     )); 
    } 

    public function getParent() 
    { 
     return CollectionType::class; 
    } 
} 

テスト

$things = array(
    $this->getReference('thing1'), // My Fixtures 
    $this->getReference('thing2'), // 
); 
$form = $this->formFactory->create(ThingsFormType::class, $things); 
$serializedForm = FormHelper::serializeForm($form); 
unset($serializedForm[0]);   // Removing 
$serializedForm[1]['name'] = 'Stuff'; // Updating 
$serializedForm[2] = array(   // Adding 
    'name' => 'Chouette', 
    'amount' => 42, 
); 
$form->submit($serializedForm); 
$this->assertTrue($form->isValid()); 
$this->em->flush(); 

あなたが見ることができるように、私は、Thing0を削除1を更新し、新しい2を追加しています。

フォームが正常にバインドされていて、新しいオブジェクトセットが正常に作成されていますが、フラッシュ時にUPDATE d 1しか表示されません。

Doctrineに追加されたものと削除されたものを通知するにはどうすればよいですか?

可能であれば、コレクション全体を閲覧する必要はありません。

答えて

0

私は本当にすべての後に何も削除する必要はありませんでしたので、ここで私は主に何をしたかである。別の手で

function updateThings(array $things) { 
    foreach ($things as $thing) { 
     $this->em->persist($thing); 
    } 
    $this->em->flush(); 
} 

、私はすぐにいくつかの組み込みの同期メカニズムを持っていると思われPersistentCollection見(getSnapshot()getDeleteDiff()、...)、エンティティの関係(getOwner())に依存しているように見え、それに関する「スタンドアロン使用」のマニュアルが見つかりませんでした。

関連する問題