我有一个表单类,我需要在表单事件(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']