KnpMenuBundle, расширение Builder с помощью ContainerAware и Controller

Я использую KNPMenuBuilder для создания меню. Я хотел бы добавить запрос в свой Builder.php, но мне нужно расширить класс Builder с помощью контроллера. По умолчанию он расширяется с помощью «ContainerAware».

Я хотел бы спросить, как расширить класс Builder двумя элементами: «ContainerAware» и «Controller»? Или как я могу создать запрос DQL без расширения контроллера?


person Kosmonaft    schedule 05.02.2014    source источник


Ответы (1)


Класс Controller — это всего лишь «инструмент» для простого использования контроллеров (некоторые люди даже говорят, что это плохо, так как он в некоторой степени защищает шаблон локатора сервисов).

Вы не должны расширять Controller в любом классе, кроме контроллера.

Чтобы получить доступ к доктрине (например, к методу Controller#getDoctrine()), вы должны запросить услугу doctrine. Тогда у вас как раз то же самое, что и при использовании метода getDoctrine().

Поскольку построитель расширяет ContainerAware, у вас есть доступ к свойству $container, и вы можете get() использовать doctrine сервис из него:

$doctrine = $this->container->get('doctrine');
$em = $doctrine->getManager();

$query = $em->createQuery(...);
person Wouter J    schedule 05.02.2014