如何在表单类型中获取实体管理器

时间:2017-03-29 11:21:53

标签: symfony-forms symfony-3.1

在构建表单时如何获得实体管理器?

我想从数据库中搜索结果并构建choicetype的选项。 我知道我可以使用entitytype,但在这种情况下,我想在数据库中记录字符串而不是对象。 而且我还需要添加更多选项。

谢谢。

1 个答案:

答案 0 :(得分:9)

在Symfony 3.2中(可能还有其他人,我不确定3.1,但它可能是相同的),$this->createForm()方法需要一个字符串作为第一个参数,并且不能采用表单对象

在表单类中添加configureOptions方法:

class YourFormType extends AbstractType
{

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'entityManager' => null,
        ]);
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        // Entity Manager is set in: $options['entityManager']
    }
}

然后在控制器中获取表单,传递实体管理器:

$form = $this->createForm(
     YourFormType::class,
     $yourEntity,
     [
         'entityManager' => $this->getDoctrine()->getManager(),
     ]
);