2016-03-09 4 views
1

У меня проблемы с переходом на Symfony3. У меня есть форма в классе FormType, и я передаю конструктор сквозного конструктора Entity.Symfony3 Form class Entity Manager

Вот пример кода: Контроллер

$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

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