首页 文章

为entitytype设置选定的值

提问于
浏览
0

我有一个具有entitytype字段的formtype .

$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'=>[] ]);

Where the 'data' is meant to be the selected values for the generated multiple select-field.

我试图传递一个User对象,一个User id的数组,用户的arraycollection等等 . 我之前的所有尝试都是来自“query_builder”结果的部分 .

他们两个都没有工作 . 有人知道在formbuilder中传递entitytype字段的“selected”值的解决方案吗?

先感谢您 .

2 回答

  • 0

    createForm() 的第二个参数似乎是 null .

    假设您有一组用户对象:

    $data = [$user1, $user2];
    

    然后尝试创建这样的表单:

    $form = $this->createForm(MedicalType::class, $data);
    

    或者这样:

    $form = $this->createForm(MedicalType::class, array(), [ 'data'=> $data ]);
    
  • 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

相关问题