设置数据未映射字段不起作用

时间:2018-05-12 04:43:55

标签: symfony

首先,关于可能的重复,我不得不说这不是一回事,因为他试图访问它并且我试图分配值。我之前看到过它并没有帮助我。

我尝试在显示表单之前设置实体字段数据,并且我尝试了几种模式,但没有一种模式适用于我,我真的不理解它。 我正在研究Symfony 4

这是带有选项"mapped" => false

的表单字段
->add('roleGroup', EntityType::class, array(
             'label' => "Grupo que recibira los correos de validación como Administración",
             'required' => false,
             "mapped" => false,
             'placeholder' => 'Elige el Grupo',
             'class'    => RoleGroup::class,
             'label_attr' => array(
                'class' => 'control-label'
                ),
             'attr' => array(
                    'class' => 'form-control select',
                )
        ))

然后在控制器中我尝试分配值,但没有成功:

$form["roleGroup"]->setData(21);

我也尝试过:

$form->get("roleGroup")->setData(21);

return $this->render('configuration/index.html.twig', 
    [
        'id'      => $id,    
        'title'   => "General",
        'partial' => "general.html.twig",
        'form'    => $form->createView(),
    ]);

有人可以告诉我发生了什么吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

由于表单字段的类型为EntityType::class,因此当您尝试传递整数值时,预期数据应为RoleGroup::class类型的对象。

因此,您需要获取实体并将其作为字段数据传递。假设21是您实体的id,它应该是您的控制器中的类似内容

$em = $this->get('doctrine.orm.entity_manager');
$entity = $em->getRepository(RoleGroup::class)->findOneBy(['id' => 21]);
$form->get('roleGroup')->setData($entity);

或者,您也可以直接在表单字段中将data设置为默认值

->add('roleGroup', EntityType::class, array(
         ...
         'data' => $entity
     ));