2011-12-30 10 views
17

Jak mogę wprowadzić usługę do Symfony2/Doctrine2 Data Fixtures? Chcę utworzyć fałszywych użytkowników i potrzebuję usługi security.encoder_factory do kodowania moich haseł.Jak wprowadzić usługę do pamięci danych Symfony 2?

Próbowałem definiowania moje dane urządzenie jako usługa

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

Następnie w moich danych Urządzenia

class LoadDataFixtures implements FixtureInterface { 

    protected $passwordEncoder; 

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

    public function load($em) { 

Ale coś podobnego

uwaga: brak argumentu 1 do . .. \ DataFixtures \ ORM \ LoadDataFixtures :: __ construct(), wywoływana ...

Odpowiedz

37

Sekcja Using the Container in the Fixtures opisuje dokładnie to, czego potrzebujesz.

Wszystko, co musisz zrobić, to wdrożyć ContainerAwareInterface w swoim urządzeniu. To spowoduje, że Symfony wstrzyknie pojemnik za pomocą Settera-Injection. Przykładem podmiot będzie wyglądać następująco:

class LoadDataFixtures implements FixtureInterface, ContainerAwareInterface { 

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

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

    public function load($em) { 

Ty nie muszą zarejestrować urządzenie jako usługa. Pamiętaj, aby zaimportować używane klasy przez use.

+2

To nie wygląda na SOLIDNE rozwiązanie problemu – murtho