我的表单中有一个下拉菜单,并且表单结构取决于其值。我设法通过事件订阅者/侦听器类解决了“ form-update-issue”问题,在该类中,我试图根据下拉列表的值更新主表单。
主要问题是我必须根据数据库中保留的值来修改表单。我的数据库架构:
我有4个表:Model,ModelCategory,ModelCategoryKey,ModelParameter。
在用户从表单(基于模型实体的表单)下拉列表中选择ModelCategory之后,我必须使用ModelParamater行更新表单,但是其数量和默认值取决于ModelCategory 1 – n ModelCategoryKey组合。
我试图在PRE_BIND事件期间将NEW ModelParameter实体附加到主Model实体(还设置其默认值),并且看起来工作正常,但是当我将带有“ collection”类型元素的“ parameters”添加到表单i时,得到下一个错误:
传递给选择字段的实体必须进行管理。也许将它们保留在实体经理中?
显然,此时我的实体不能(也不应该)持久。
欢迎所有想法!
更新:在preSubmit / preBind之后修改表单:
$form->add('parameters','collection',array(
'type' => new ModelParameterType(),
));
或者
$form->add(
$this->factory->createNamed('parameters','collection',null,
array(
'type' => new ModelParameterType()
))
);
其中“ factory”属性是FormFactoryInterface。错误消息是相同的。
UPDATE2:
进一步的调查证明,如果我不向关联添加“默认”实体。然后就可以正常工作了。
这是我的表单修改方法的来源:
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
))
);
}
要解决的问题我刚刚注释掉$ param-> setModel($ entity);。行,它似乎工作正常。如果确实可行,我将做更多的工作并分享经验。
我已经设法解决了我的问题,所以这就是我发现的内容:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句