2017-09-25 2 views

答えて

1

コンテナ全体をフォームタイプに挿入するのは悪い習慣です。必要な依存関係のみをフォームの種類に挿入することを検討してください。単純にdefine your form type as a serviceにして、必要な依存関係を注入することができます。

のsrc/AppBundle /フォーム/ TaskType.php

use Doctrine\ORM\EntityManagerInterface; 
// ... 

class TaskType extends AbstractType 
{ 
    private $em; 

    public function __construct(EntityManagerInterface $em) 
    { 
     $this->em = $em; 
    } 

    // ... 
} 

のsrc/AppBundle /リソース/設定/ services.yml

services: 
    AppBundle\Form\TaskType: 
     arguments: ['@doctrine.orm.entity_manager'] 
     tags: [form.type] 

二つの方法があるリポジトリクラスを注入するために、 。 2番目のアプローチはよりクリーンです。

のEntityManagerクラスを注入し、EMからリポジトリクラスを取得:EMファクトリを使用してサービスとして

$this->em->getRepository(User::class) 

登録リポジトリクラスとフォームタイプにそれを注入:

services: 
    AppBundle\Repository\UserRepository: 
     factory: ['@doctrine.orm.entity_manager', getRepository] 
     arguments: ['AppBundle\Entity\User'] 
+0

私のアプリケーションからリポジトリを取得したい – webwinner

+0

私の答えは、あなたのサービスにリポジトリクラスを挿入するための良い習慣で更新されました。 –

1

1つの問題は、コントローラからあなたにformTypeファイルにパラメータとしてコンテナを渡すことです:

$form_type = new MyFormType($this->container); 

と構文を追加しますあなたにformTypeファイル内のメソッド:

protected $container; 

public function __construct($container) 
{ 
    $this->container = $container; 
} 

次にあなたがしてコンテナにアクセスすることができます「の$ this - >コンテナ」;

+0

古代版のSymfonyを使用している場合のみ。時が変わった。 – Cerad

関連する問題