2011-12-30 13 views
17

¿Cómo puedo inyectar un servicio en Symfony2/Doctrine2 Data Fixtures? Quiero crear usuarios ficticios y necesito el servicio security.encoder_factory para codificar mis contraseñas.¿Cómo inyectar el servicio en los accesorios de datos de Symfony 2?

Traté definir mi Fixture de datos como un servicio

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

Luego, en mi Fixture de datos

class LoadDataFixtures implements FixtureInterface { 

    protected $passwordEncoder; 

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

    public function load($em) { 

Pero tiene algo así como

Aviso: falta el argumento 1 de . .. \ DataFixtures \ ORM \ LoadDataFixtures :: __ construct(), llamado en ...

Respuesta

37

La sección Using the Container in the Fixtures describe exactamente lo que necesita.

Todo lo que necesita hacer es implementar el ContainerAwareInterface en su dispositivo. Esto hará que Symfony inyecte el contenedor a través de Setter-Injection. Una entidad ejemplo sería el siguiente:

class LoadDataFixtures implements FixtureInterface, ContainerAwareInterface { 

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

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

    public function load($em) { 

Usted no necesita registrar el dispositivo como un servicio. Asegúrese de importar las clases usadas a través del use.

+2

Esto no se ve como una solución SOLIDA a la pregunta – murtho

Cuestiones relacionadas