2011-12-30 64 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

這看起來不像是SOLID溶劑問題 – murtho 2017-01-03 18:47:04