2016-04-11 11 views
2

のEventSubscriberでEntity Managerをインジェクトします。これは、フォームのEventListenerを使用しているので、EntityManagerをインジェクトする方法に苦労しています。symfony - フォーム

私はこれにformTypeがUserTypeと呼ばれており、このクラスでは私が持っているのEntityManager

class UserType extends AbstractType 
{ 
    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->addEventSubscriber(new AddProfileFieldSubscriber()); 
     $builder->addEventSubscriber(new AddDepartmentDegreeCourseFieldSubscriber()); 
    } 

    /** 
    * @param OptionsResolver $resolver 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'AppBundle\Entity\User' 
     )); 
    } 
} 

にアクセスする必要があるEventSubscriber AddDepartmentDegreeCourseFieldSubscriberこれは私が手にエラーが

を以下のようである私の services.yml

app.department_course_degree_subscriber: 
    class: AppBundle\Form\EventListener\AddDepartmentDegreeCourseFieldSubscriber 
    arguments: ["@doctrine.orm.entity_manager"] 
    tags: 
     - { name: kernel.event_subscriber } 

です

Catchable Fatal Error: Argument 1 passed to AppBundle\Form\EventListener\AddDepartmentDegreeCourseFieldSubscriber::__construct() must be an instance of Doctrine\ORM\EntityManager, none given, called in /Users/shairyar/Sites/oxford-portal/src/AppBundle/Form/UserType.php on line 21 and defined

私はエラーが何を意味するのか知っていますが、services.ymlに登録したサービスはEntityManagerを注入する必要があります。なぜこのエラーが表示されるのですか?私はここで何が欠けていますか?どんな助けでも本当に感謝します。

+0

どのようにして、Formオブジェクトを作成するのですか? formTypeを取得するには、コンテナを使用する必要があります。 – codeneuss

+0

コントローラで作成された@v.eiglerフォーム '$ profileForm = $ this-> createForm(UserType :: class、$ userInfo);'もしあなたの質問が正しく理解できれば。 – Baig

+0

複製:http://stackoverflow.com/questions/24876767/inject-symfony-entitymanager-into-form-type-via-services – codeneuss

答えて

3

フォームを作成するときは、AddDepartmentDegreeCourseFieldSubscriberという新しいインスタンスを渡すからです。サービスコンテナからインスタンスを渡す必要があります。

use AppBundle\Form\EventListener\AddDepartmentDegreeCourseFieldSubscriber; 

class UserType extends AbstractType 
{ 
    private $addDepartmentDegreeCourseFieldSubscriber; 

    public function __construct(AddDepartmentDegreeCourseFieldSubscriber $subscriber) 
    { 
     $this->addDepartmentDegreeCourseFieldSubscriber = $subscriber; 
    } 

    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->addEventSubscriber($this->addDepartmentDegreeCourseFieldSubscriber); 
    } 
} 
# app/config/services.yml 
services: 
    app.department_course_degree_subscriber: 
     class: AppBundle\Form\EventListener\AddDepartmentDegreeCourseFieldSubscriber 
     arguments: ["@doctrine.orm.entity_manager"] 
     tags: 
      - { name: kernel.event_subscriber } 

    app.form.type.my_user_form: 
     class: AppBundle\Form\UserType 
     arguments: [ "@app.department_course_degree_subscriber" ] 
     tags: 
      - { name: form.type } 
+0

多くのおかげで、私は一見を持って、実際に私が話していた解決策である – Baig

+0

を返すでしょう。私は試しましたが、getSubscribedEvents()メソッドが静的なので、EventSubscriberInterfaceに問題があると思っています。 – codeneuss

+0

完全に働いた、ありがとう – Baig

関連する問題