如何访问KnpMenuBundle中的Entity Manager?

时间:2012-02-27 12:18:27

标签: symfony

我正在使用KnpMenuBundle,并希望访问菜单Builder类中的Doctrine Entity Manager。我想检查数据库中可能需要显示在菜单中的一些不同值。我尝试通过构造函数传递EM,但它不起作用。实现这一目标的最佳方法是什么?谢谢!

这是我添加到Builder类的代码:

private $em;

public function __construct(EntityManager $em)
{

    $this->em = $em;


}

这会引发错误:可捕获致命错误:传递给XXX \ ThemeBundle \ Menu \ Builder :: __ construct()的参数1必须是Doctrine \ ORM \ EntityManager的实例,没有给出,在

中调用

3 个答案:

答案 0 :(得分:6)

您不必在构造函数中传递EntityManager作为参数。如果您的Builder课程延伸ContainerAware课程,那么您可以通过在EntityManager方法中添加以下行来访问*Menu对象。

    $em = $this->container->get('doctrine.orm.entity_manager');

答案 1 :(得分:0)

添加到服务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;
}

答案 2 :(得分:-1)

您必须将Menu类创建为服务,然后根据需要注入整个容器,但您只需要[@ doctrine.orm.entity_manager]您可以阅读有关menu as service的更多信息