Как внедрить услугу в системы хранения данных 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(), вызванный...
Ответы
Ответ 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
.