我正在使用 KNPMenuBuilder 创建菜单。我想在我的 Builder.php 中添加查询,但我需要通过 Controller 扩展 Builder 类。默认情况下,它由“ContainerAware”扩展。
我想问一下如何通过“ContainerAware”和“Controller”两个元素来扩展Builder类?或者如何在不扩展控制器的情况下创建 DQL 查询?
我正在使用 KNPMenuBuilder 创建菜单。我想在我的 Builder.php 中添加查询,但我需要通过 Controller 扩展 Builder 类。默认情况下,它由“ContainerAware”扩展。
我想问一下如何通过“ContainerAware”和“Controller”两个元素来扩展Builder类?或者如何在不扩展控制器的情况下创建 DQL 查询?
该类Controller
只是一个轻松使用控制器的“工具”(有些人甚至说使用它是一件坏事,因为它在某种程度上提倡服务定位器模式)。
您不应该Controller
在控制器以外的任何类中进行扩展。
要获得学说(如Controller#getDoctrine()
方法),您应该请求doctrine
服务。然后你就和使用该getDoctrine()
方法时一样。
由于构建器 extends ContainerAware
,您可以访问$container
属性并且可以从中get()
获取doctrine
服务:
$doctrine = $this->container->get('doctrine');
$em = $doctrine->getManager();
$query = $em->createQuery(...);