我已经创建了自己的服务,并且需要注入原则EntityManager,但是我没有看到__construct()在我的服务上被调用,并且注入不起作用。
__construct()
这是代码和配置:
<?php namespace Test\CommonBundle\Services; use Doctrine\ORM\EntityManager; class UserService { /** * * @var EntityManager */ protected $em; public function __constructor(EntityManager $entityManager) { var_dump($entityManager); exit(); // I've never saw it happen, looks like constructor never called $this->em = $entityManager; } public function getUser($userId){ var_dump($this->em ); // outputs null } }
这是services.yml我的包
services.yml
services: test.common.userservice: class: Test\CommonBundle\Services\UserService arguments: entityManager: "@doctrine.orm.entity_manager"
我已经将.yml导入config.yml了我的应用中
config.yml
imports: # a few lines skipped, not relevant here, i think - { resource: "@TestCommonBundle/Resources/config/services.yml" }
当我在控制器中致电服务时
$userservice = $this->get('test.common.userservice'); $userservice->getUser(123);
我得到一个对象(不为null),但是$this->em在UserService中为null,正如我已经提到的,从未调用过UserService上的构造函数
$this->em
还有一件事,Controller和UserService处于不同的捆绑中(我确实需要用它来使项目井井有条),但仍然:一切正常,我什至可以调用
$this->get('doctrine.orm.entity_manager')
在用于获取UserService和获取有效(非null)EntityManager对象的同一控制器中。
看起来我缺少配置项或UserService和Doctrine配置之间的某些链接。
您的类的构造方法应该调用__construct(),而不是__constructor():
__constructor()
public function __construct(EntityManager $entityManager) { $this->em = $entityManager; }