Как получить доступ к Entity Manager внутри KnpMenuBundle? - PullRequest
1 голос
/ 27 февраля 2012

Я использую KnpMenuBundle и хотел бы получить доступ к Doctrine Entity Manager внутри класса Builder меню. Я хочу проверить базу данных на наличие различных значений, которые могут появиться в меню. Я пытался передать EM через конструктор, но это не работает. Какой лучший способ сделать это? Спасибо!

Вот код, который я добавил в класс Builder:

private $em;

public function __construct(EntityManager $em)
{

    $this->em = $em;


}

Это выдает ошибку: Catchable Fatal Error: Аргумент 1, переданный в XXX \ ThemeBundle \ Menu \ Builder :: __ construct (), должен быть экземпляром Doctrine \ ORM \ EntityManager, не задан, вызывается в

Ответы [ 3 ]

6 голосов
/ 27 февраля 2012

Вам не нужно передавать EntityManager в качестве аргумента в конструкторе. Если ваш класс Builder расширяет класс ContainerAware, то вы можете получить доступ к объекту EntityManager, добавив следующую строку в ваши *Menu методы.

    $em = $this->container->get('doctrine.orm.entity_manager');
0 голосов
/ 06 июля 2015

Добавить в сервис XML-файл:

<service id="app.menu_builder" class="AppBundle\Menu\MenuBuilder">
    <argument type="service" id="knp_menu.factory"/>
    <argument type="service" id="doctrine.orm.entity_manager"/>
</service>

Добавить в свой класс MenuBuilder:

public function __construct(FactoryInterface $factory,EntityManager $entityManager) {
    $this->factory = $factory;
    $this->em = $entityManager;
}
0 голосов
/ 27 февраля 2012

Вы должны создать свой класс Menu как сервис, а затем ввести, если необходимо, введенный контейнер, но вам нужен только [@ doctrine.orm.entity_manager]. Вы можете узнать больше о меню как сервисе

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