我想在自制服务中使用EntityManager
在我的config.yml
中services:
myfunc:
class: Acme\TopBundle\MyServices\MyFunc
arguments: []
在Acme \ TopBundle \ MyServices \ MyFunc.php
中namespace Acme\TopBundle\MyServices;
use Doctrine\ORM\EntityManager;
class MyFunc
{
public $em;
public function check(){
$this->em = $this->getContainer()->get('doctrine')->getEntityManager(); // not work.
.
.
当我调用方法check()时显示错误。
Call to undefined method Acme\TopBundle\MyServices\MyFunc::getContainer()
如何在myFunc类中使用getContainer()?
答案 0 :(得分:3)
由于您(幸运的是)没有在您的myfunct
服务中注入容器,因此您的服务中没有可用的容器参考。
您可能不需要通过服务容器获取实体管理器!请记住,DIC允许您通过仅注入他们需要的相关服务(在您的情况下为实体经理)来定制您的服务。
namespace Acme\TopBundle\MyServices;
use Doctrine\ORM\EntityManager;
class MyFunc
{
private $em;
public __construct(EntityManager $em)
{
$this->em = $em;
}
public function check()
{
$this->em // give you access to the Entity Manager
您的服务定义,
services:
myfunc:
class: Acme\TopBundle\MyServices\MyFunc
arguments: [@doctrine.orm.entity_manager]
此外,
答案 1 :(得分:0)
你需要让MyFunc“容器识别”:
namespace Acme\TopBundle\MyServices;
use Symfony\Component\DependencyInjection\ContainerAware;
class MyFunc extends ContainerAware // Has setContainer method
{
public $em;
public function check(){
$this->em = $this->container->get('doctrine')->getEntityManager(); // not work.
您的服务:
myfunc:
class: Acme\TopBundle\MyServices\MyFunc
calls:
- [setContainer, ['@service_container']]
arguments: []
我应该指出,注射容器通常不是必需的,并且不赞成。您可以将实体管理器直接注入MyFunc。更好的方法是注入你需要的任何实体存储库。