如何在twig中加载的类中提供doctrine连接? 我使用以下内容 https://github.com/Elendev/ElendevWidgetBundle
创建小部件,我需要的是访问在symfony中创建的数据库全局连接。
在zend中我会使用Zend_Registry作为例子。
我正在写这样的小部件:
<?php
namespace Test\Bundle\CommonBundle\Widget;
use Elendev\WidgetBundle\Annotation\Widget;
class Links {
/**
* @Widget(tag="links", priority=99)
*/
public function links(){
$twig = new \Twig_Environment(new \Twig_Loader_Filesystem(array(__DIR__."/views/")) );
$links = new \Test\Bundle\CommonBundle\Entity\WidgetLinksData();
//how to i access entity manager from here?
return $twig->render('links.html.twig', );
}
}
答案 0 :(得分:1)
您需要注入EntityManager 您的服务定义可能如下所示:
my_service:
class: Test\Bundle\CommonBundle\Widget\Links
# Add this 2 lines
arguments:
- @doctrine.orm.entity_manager
tags:
- {name: elendev.widget, method: memberDatas, tag: member_profile}
然后,EntityManager实例将被加载到您的类构造函数中,因此您只需抓住它:
use Doctrine\ORM\EntityManager;
class Links
{
private $em;
public function __construct(EntityManager $em)
{
$this->em = $em;
}
}
你可以用它在你的课堂方法中做任何你需要的事情:
$this->em->find(...);
但是在一个twig扩展中注入EntityManager并不是一个“最佳实践”,你可以使用另一个服务来包装它。
有关使用symfony进行依赖注入的更多信息:http://symfony.com/doc/current/components/dependency_injection/introduction.html