如何将服务注入Symfony 2数据夹具?

Jie*_*eng 19 symfony doctrine-orm

如何将服务注入Symfony2/Doctrine2数据夹具?我想创建虚拟用户并需要security.encoder_factory服务来编码我的密码.

我尝试将我的数据夹具定义为服务

myapp.loadDataFixture:
    class: myapp\SomeBundle\DataFixtures\ORM\LoadDataFixtures
    arguments:
        - '@security.encoder_factory'
Run Code Online (Sandbox Code Playgroud)

然后在我的数据夹具中

class LoadDataFixtures implements FixtureInterface {

    protected $passwordEncoder;

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

    public function load($em) {
Run Code Online (Sandbox Code Playgroud)

但得到了类似的东西

警告:缺少参数1 ...\DataFixtures\ORM\LoadDataFixtures :: __ construct(),在...中调用

Eln*_*mov 38

" 灯具中使用容器"部分准确描述了您的需求.

您需要做的就是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) {
Run Code Online (Sandbox Code Playgroud)

并不需要注册灯具作为一种服务.确保通过导入已使用的类use.

  • 对于这个问题,这看起来不像是SOLID解决方案 (2认同)