Symfony2 зависимости в классе - PullRequest
1 голос
/ 08 февраля 2012

Я пытаюсь создать класс для управления частью моего приложения. но мне нужно получить доступ к конфигурации в resources / config.yml

Я попытался расширить свой класс с помощью containerAware в качестве контроллера. Но контейнер не установлен ...

Я бы хотел сделать что-то подобное:

class MyClass extends ContainerAware
{
   public function myFunciton()
   {
      $em = $this->get('Doctrine')->getEntityManager();
   }
}

любое предложение приветствуется

1 Ответ

4 голосов
/ 08 февраля 2012

Расширение ContainerAware не предоставляет автоматически доступ к контейнеру службы - вам нужно внедрить контейнер в ваш класс.Есть два способа сделать это:

  • Если ваш класс зарегистрирован как сервис, вы можете ввести @service_container
  • Если ваш класс не является сервисом, но к нему обращаютсяиз класса, который имеет доступ к контейнеру (например, к контроллеру), вы можете явно вызвать setContainer()

При этом вы не должны внедрять контейнер в ваши классы .Это затрудняет проверку ваших классов.Есть несколько исключений из этого, но они встречаются не часто.

Вместо этого вам следует вводить только те услуги, которые вам нужны.В случае менеджера сущностей, вы должны внедрить @doctrine.orm.default_entity_manager.

Что касается доступа к данным из config.yml, я бы предложил включить файл (который может быть сделан при определении службы) и синтаксический анализyml, используя Symfony\Component\Yaml\Parser или Symfony\Component\Yaml\Yaml.Синтаксические анализаторы преобразуют строку yml в переменную PHP, с которой затем можно легко работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...