Symfony3 表单 class 实体管理器

Symfony3 Form class Entity Manager

我在迁移到 Symfony3 时遇到了问题。 我在 FormType class 中有一个表单,我通过构造函数传递实体管理器。

代码示例如下: 控制器

$form = $this->createForm(new SubjectType($emDefault));

表格Class

class SubjectType extends AbstractType {
    private $em;
    public function __construct($em) {
        $this->em = $em;
    }

    public function buildForm(FormBuilderInterface $builder, array $options) {        
        $builder
                ->add('subject', 'entity', array(
                    'em' => $this->em,
                    'class' => 'MyBundle:Subject',
                    'query_builder' => function ($em) {
                        return $em->createQueryBuilder('s')
                        ->where('s.active = 1');
                    },
                    'property' => 'name')
                )
                ->add('create', 'submit', array('label' => 'choose'));
    }
    ...

Symfony 3 将方法 createForm 更改为:

$this->createForm(SubjectType::class);

并且有了这个声明,我不知道如何通过实体管理器来形成 class。

有人帮忙吗?

您需要声明您的 FormType as a service.

services.yml

services:
    app.form.type.subject:
        class: AppBundle\Form\Type\SubjectType
        arguments: ["@doctrine.orm.entity_manager"]
        tags:
            - { name: form.type }

在您的构造函数中重新添加注释行,您将能够像以前的版本一样使用 $this->em