我有一个表单类,我需要填充表单事件(FormEvents :: POST_SET_DATA) .
对于文本类型非常简单:
$form->get("fieldName")->setData("stringValue");
对于实体类型,这不起作用:
$form->get("fieldName")->setData(array("val1", "val2", "val3"));
我认为我必须先实例化实体,然后以这种方式设置数据:
$entity1 = $this->getDoctrine()->getRepository("AcmeBundle:MyEntity")->find("val1");
$entity2 = $this->getDoctrine()->getRepository("AcmeBundle:MyEntity")->find("val2");
$entity3 = $this->getDoctrine()->getRepository("AcmeBundle:MyEntity")->find("val3");
$form->get("fieldName")->setData(array($entity1, $entity2, $entity3));
这样它可以工作,但我必须在FormEventSubscriber中注入EntityManager,我需要首先知道entityType .
1)这是正确的方法吗?
2)我如何从FormBuilder类中检索实体的类型?
我可以用这种方式检索实体类型:
$form->get ( "fieldName" )->getConfig()->getAttributes()['data_collector/passed_options']['class']
提前致谢
嗨@dragoste,谢谢你的回复 . 我的目标是在显示之前填充(服务器端)前一个值的表单字段 . 我认为使用表单事件是实现我的目标的最佳方式(我正在使用FormEvents :: POST_SET_DATA事件),但是当我想填充这种字段时我遇到了问题:
...
$builder->add("manyToManyField", EntityType::class, array (
"class" => "AcmeBundle:TestEntity",
"choice_label" => "id",
"multiple" => true
))
在EventSubscriber类我必须做一些事情,如:
public function onFormSetDataPre(FormEvent $event){
$form = $event->getForm();
$field= $form->get("manyToManyField");
$field->setData($prevValue);
}
我的问题是在EventSubscriber中,$ prevValue是实体的ID . 如果我直接设置ID它不起作用 . 在setData()中,我必须传递实体,传递实体我必须从数据库中获取它 . 我的问题是:
1)从数据库中获取它是正确的)
2)我获得实体存储库的方式是正确的吗?
$field->getConfig()->getAttributes()['data_collector/passed_options']['class']