为entitytype设置选定的值

时间:2017-02-14 08:37:34

标签: symfony formbuilder

我的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字段的值?

提前谢谢。

2 个答案:

答案 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'],
            ));

结果类似于呈现的形式:

The rendered form