2014-02-05 2 views
0

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

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

ответ

1

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

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

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

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

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

$query = $em->createQuery(...); 
+0

Спасибо :) It 'ы работы – Kosmonaft

Смежные вопросы