2011-12-30 4 views
17

Symfony2/Doctrine2 Data Fixturesにサービスを注入するにはどうすればよいですか?ダミーのユーザーを作成し、パスワードを暗号化するにはsecurity.encoder_factoryサービスが必要です。Symfony 2データフィクスチャにサービスを注入するには?

私は自分のデータフィクスチャに続いサービス

myapp.loadDataFixture: 
    class: myapp\SomeBundle\DataFixtures\ORM\LoadDataFixtures 
    arguments: 
     - '@security.encoder_factory' 

として

class LoadDataFixtures implements FixtureInterface { 

    protected $passwordEncoder; 

    public function __construct($encoderFactory) { 
     $this->passwordEncoder = $encoderFactory->getEncoder(new User()); 
    } 

    public function load($em) { 

を私のデータフィクスチャを定義しようとしたが、

警告のようなものだ: ための欠落引数1。 .. \ DataFixtures \ ORM \ LoadDataFixtures :: __ construct()...

答えて

37

Using the Container in the Fixturesセクションには、必要なものが正確に記載されています。

あなたがする必要があることは、ContainerAwareInterfaceをあなたの灯具に実装することだけです。これにより、SymfonyはSetter-Injection経由でコンテナを注入します。エンティティの例は、次のようになります。

class LoadDataFixtures implements FixtureInterface, ContainerAwareInterface { 

    /** 
    * @var ContainerInterface 
    */ 
    private $container; 

    public function setContainer(ContainerInterface $container = null) 
    { 
     $this->container = $container; 
    } 

    public function load($em) { 

あなたはサービスなどの固定具を登録する必要はありませありません。使用したクラスをuse経由でインポートするようにしてください。

+2

これは、質問に対する完全な解決策のようには見えません – murtho

関連する問題