У меня есть раскрывающееся меню в моей форме, и структура формы зависит от ее стоимости. Мне удалось решить «form-update-issue» с классом подписчика/слушателя событий, где я пытаюсь обновить основную форму в соответствии со значением раскрывающегося списка.Встраиваемые формы Symfony2 + обновление динамической формы
Основная проблема заключается в том, что мне нужно изменить форму из значений, которые сохраняются в базе данных. Моя DB схема:
У меня есть 4 таблицы: Модель, ModelCategory, ModelCategoryKey, ModelParameter.
- ModelCategory 1 - п Модель 1 - м ModelParameter
- ModelCategory 1 - п ModelCategoryKey
- ModelCategoryKey 1 - п ModelParameter
После того как пользователь выбрать ModelCategory из формы-х (форма, основанная на объекте Model). Я должен обновить форму с помощью строк ModelParamater, но это число и значения по умолчанию зависят от ModelCategory 1 - n ModelCategoryKey assocaiton.
Я попытался привязать новые объекты ModelParameter к основному объекту модели во время события PRE_BIND (также задал свои значения по умолчанию), и кажется, что он работает нормально, но когда я добавляю «параметры» с помощью типизированного элемента коллекции в форме я получаю следующую ошибку:
Entities passed to the choice field must be managed. Maybe persist them in the entity manager?
Очевидно, мои объекты не могут быть (и не должно быть) сохранялось в это время.
Все идеи приветствуются!
UPDATE: Изменение формы после preSubmit/preBind:
$form->add('parameters','collection',array(
'type' => new ModelParameterType(),
));
ИЛИ
$form->add(
$this->factory->createNamed('parameters','collection',null,
array(
'type' => new ModelParameterType()
))
);
где атрибут 'завод' является FormFactoryInterface. Сообщение об ошибке одно и то же.
UPDATE2:
Дальнейшие исследования доказали, что если я не добавить "по умолчанию" сущности к Assocation. Затем он работает без ошибок.
Вот источник моего метода формы модифицирующего:
public function preSubmit(FormEvent $event) {
$form = $event->getForm();
$id = $event->getData()['modelCategory'];
$entity = $form->getData();
$categoryKeys = $this->em->getRepository('MyBundle:ModelCategoryKey')->findByModelCategory(
$this->em->getReference('MyBundle:modelCategory',$id)
);
foreach ($categoryKeys as $key) {
$param = new ModelParameter();
$param->setModel($entity);
$param->setKey($key);
$entity->addParameter($param);
}
$form->add(
$this->factory->createNamed('parameters','collection',null,
array(
'type' => new ModelParameterType(),
'allow_add' => true,
'cascade_validation' => true
))
);
}
КАЖЕТСЯ, решаемые Я только закомментировал $ парамет-> setModel ($ объект); и он работает нормально. Я буду работать над этим больше и поделится опытом, если он действительно работает.
Я пытаюсь показать вновь созданные объекты с коллекцией, а не с выбором типизированного поля. Я понятия не имею, почему сообщение об ошибке говорит, что это поле выбора :) – nothingam