Я пытаюсь управлять списком 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 заметить добавленные и удаленные?
Я бы предпочел не просматривать всю коллекцию, чтобы сделать проверку, если это возможно.