Symfony3表单类实体管理器

时间:2016-03-09 16:47:15

标签: forms class entitymanager symfony

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

以下是代码示例: 控制器

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

表格类

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);

通过此声明,我不知道如何将实体管理器传递给表单类。

有人帮忙吗?

1 个答案:

答案 0 :(得分:2)

您需要声明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