我的formtype有一个entitytype字段。
$builder->add('canRead', EntityType::class, [
'attr' => ['style' => 'height:150px;'],
'choice_value' => 'id',
'required' => true,
'multiple' => true,
'expanded' => false,
'class' => 'AppBundle\Entity\User',
'query_builder' => function (EntityRepository $er) {
$qb = $er->createQueryBuilder('e');
$qb->innerJoin('e.roles', 'r')->where('r.role LIKE :role')->setParameter('role', 'ROLE_ADMIN_%')
->orderBy('e.lastName', 'ASC')
->addOrderBy('e.firstGame', 'ASC');
return $qb;
},
]);
在控制器中,我这样称呼:
$form = $this->createForm(MedicalType::class, null, [ 'data'=>[] ]);
'数据'是指生成的多个选择字段的选定值。
我试图传递一个User对象,一个User id的数组,用户的数组收集等等。之前的所有尝试都来自" query_builder"结果当然。
他们两个都没有工作。有人知道通过的解决方案"选择" formbuilder中的entitytype字段的值?
提前谢谢。
答案 0 :(得分:0)
createForm()
null
的第二个参数似乎是问题。
假设您有一组用户对象:
$data = [$user1, $user2];
然后尝试创建这样的表单:
$form = $this->createForm(MedicalType::class, $data);
或者这样:
$form = $this->createForm(MedicalType::class, array(), [ 'data'=> $data ]);
答案 1 :(得分:0)
我尝试了上述解决方案,但对我而言无效,因此这可能对其他人有所帮助。
我必须将模块数组传递给表单,以便它将成为默认选择的值,所以在我的控制器中,我这样做了:
function testAction(){
$modules=array();
//here i'm just loading the modules that will be the default selected values
for ($i=7;$i<20;$i++){
$modules[]=$this->getDoctrine()->getRepository("AppBundle:Module")->find($i);
}
//passing the modules to the form
$form=$this->createForm(ModuleFieldType::class, array(), [ 'data'=> $modules ]);
return $this->render("/Security/test.html.twig",array("form"=>$form->createView()));
}
在我的表单中,我这样做了:
$builder->add('module', EntityType::class, array(
'class' => 'AppBundle\Entity\Module',
'choice_label' => 'libelle',
'label' => 'Modules Enseignés',
'placeholder'=>"selectionez les modules enseigné",
'group_by' => function (Module $module) {
return $module->getDepartement()->getName();
},
"attr"=>array("id"=>"modulesSelect"),
'multiple' => true,
//you need add this to the form in order to read the data
'data'=>$options['data'],
));
结果类似于呈现的形式: