2016-03-09 47 views
1

我無法遷移到Symfony3。 我有FormType類中的窗體,並通過實體管理器通過構造函數。Symfony3 Form class實體管理器

下面是示例的代碼: 控制器

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

Form類

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

http://symfony.com/doc/current/cookbook/form/create_custom_field_type.html#creating-your-field-type-as-a-service – Cerad

回答

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在以前的版本。

+0

謝謝。我之前在文檔中發現了這個,但是在我的代碼中有一些其他錯誤,所以這個解決方案對我不起作用,但是現在我用它,它現在是 但是現在它終於起作用了:) – user1336101

+0

如果你想,創建另一個問題隨着你的錯誤追蹤,我很樂意與你一起調試。 – chalasr