在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」之間有區別嗎? –