Как добавить Entity Manager в пользовательский класс или службу? - PullRequest
5 голосов
/ 05 ноября 2011

В Symfony2, как я могу добавить менеджера сущностей Doctrine в пользовательский класс или службу?

Я пробовал $em = $this->get("doctrine.orm.entity_manager"); и $em = $this->getDoctrine()->getEntityManager();

Оба не удались, что привело меняпопытаться расширить класс Controller с помощью моего пользовательского класса / сервиса, и он погиб в гигантском огненном шаре.

Ответы [ 2 ]

8 голосов
/ 06 ноября 2011

Вы не должны определить свой контроллер как службу для доступа к EntityManager. Упомянутый выше метод Controller::getDoctrine() просто возвращает реестр доктрин, вызывая $this->container->get('doctrine') после проверки того, что сервис доктрины действительно доступен.

Просто сделайте свой собственный класс / контроллер расширенным ContainerAware и определите метод ярлыка, например:

public function getEntityManager() {
    return $this->container->get('doctrine')->getEntityManager();
}

Обратите внимание, что $this->container->get(..), а не $this->get(..) в классе, расширяющем / реализующем ContainerAware.

7 голосов
/ 05 ноября 2011

Вам необходимо внедрить службу управления сущностями в вашу пользовательскую службу.Ваше определение сервиса должно выглядеть так:

my.service.name:
  class:     my\class
  arguments: [ @doctrine.orm.default_entity_manager ]

Убедитесь, что метод __construct вашей службы принимает в качестве аргумента менеджер сущностей.

См. Главу Контейнер услуг для получения дополнительной информации.

Кстати, $this->getDoctrine() - это ярлык, который будет работать только в классе, который расширяет Symfony\Bundle\FrameworkBundle\Controller\Controller

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