在Symfony2中,我怎样才能将Doctrine的实体管理器添加到自定义类或服务中?如何将实体管理器添加到自定义类或服务?
我试图$em = $this->get("doctrine.orm.entity_manager");
和$em = $this->getDoctrine()->getEntityManager();
两人都没有成功,这使我试着和我的自定义类/服务扩展Controller类,以及火灾的巨型球是死了。
在Symfony2中,我怎样才能将Doctrine的实体管理器添加到自定义类或服务中?如何将实体管理器添加到自定义类或服务?
我试图$em = $this->get("doctrine.orm.entity_manager");
和$em = $this->getDoctrine()->getEntityManager();
两人都没有成功,这使我试着和我的自定义类/服务扩展Controller类,以及火灾的巨型球是死了。
您需要将实体管理器服务注入到自定义服务中。你的服务定义应该是这样的:
my.service.name:
class: my\class
arguments: [ @doctrine.orm.default_entity_manager ]
确保您的服务__construct
方法将实体管理器作为参数。
有关更多信息,请参阅Service Container chapter。
BTW,$this->getDoctrine()
是一种快捷的方法,将只在扩展Symfony\Bundle\FrameworkBundle\Controller\Controller
一类的工作,你做不必须按顺序访问的EntityManager来定义你的控制器作为一个服务。上面提到的Controller::getDoctrine()
方法在检查了原则服务实际可用之后,通过调用$this->container->get('doctrine')
来简单地返回Doctrine注册表。
只要让你的自定义类/控制器扩展ContainerAware
,并定义一个快捷的方法,如:
public function getEntityManager() {
return $this->container->get('doctrine')->getEntityManager();
}
请注意,这是$this->container->get(..)
,而不是$this->get(..)
一类扩展/实现ContainerAware
。
在Symfony 2.3中我使用“@ doctrine.orm.entity_manager”。 “@ doctrine.orm.entity_manager”和“@ doctrine.orm.default_entity_manager”之间有区别吗? –