0

我正在使用 KNPMenuBuilder 创建菜单。我想在我的 Builder.php 中添加查询,但我需要通过 Controller 扩展 Builder 类。默认情况下,它由“ContainerAware”扩展。

我想问一下如何通过“ContainerAware”和“Controller”两个元素来扩展Builder类?或者如何在不扩展控制器的情况下创建 DQL 查询?

4

1 回答 1

1

该类Controller只是一个轻松使用控制器的“工具”(有些人甚至说使用它是一件坏事,因为它在某种程度上提倡服务定位器模式)。

您不应该Controller在控制器以外的任何类中进行扩展。

要获得学说(如Controller#getDoctrine()方法),您应该请求doctrine服务。然后你就和使用该getDoctrine()方法时一样。

由于构建器 extends ContainerAware,您可以访问$container属性并且可以从中get()获取doctrine服务:

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

$query = $em->createQuery(...);
于 2014-02-05T15:51:42.753 回答