Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как я могу добавить Entity Manager в настраиваемый класс или службу?

Автор вопроса: NickОтветов: 2

Как в Symfony2 добавить диспетчер сущностей Doctrine к пользовательскому классу или сервису?

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

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

symfonydoctrine-orm

Ответы

Ответ 1 · рейтинг 7 · Steven Mercatante

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

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

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

Дополнительную информацию см. В главе о контейнерах служб.

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

Ответ 2 · рейтинг 8 · dylan oliver

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

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

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы