2
私は
Thing
のリストを管理しようとしている
は、任意のThing
はname
持っていると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();
あなたが見ることができるように、私は、Thing
0
を削除1
を更新し、新しい2
を追加しています。
フォームが正常にバインドされていて、新しいオブジェクトセットが正常に作成されていますが、フラッシュ時にUPDATE
d 1
しか表示されません。
Doctrineに追加されたものと削除されたものを通知するにはどうすればよいですか?
可能であれば、コレクション全体を閲覧する必要はありません。