Подтвердить что ты не робот

Как внедрить услугу в системы хранения данных Symfony 2?

Как я могу ввести службу в Symfony2/Doctrine2 Data Fixtures? Я хочу создать фиктивных пользователей и вам понадобится служба security.encoder_factory для кодирования моих паролей.

Я попытался определить свой Data Fixture как службу

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(), вызванный...

4b9b3361

Ответ 1

Раздел Использование контейнера в светильниках описывает именно то, что вам нужно.

Все, что вам нужно сделать, это реализовать 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.