独自のサービスを作成し、ドクトリンEntityManagerを注入する必要がありますが、それが__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:
test.common.userservice:
class: Test\CommonBundle\Services\UserService
arguments:
entityManager: "@doctrine.orm.entity_manager"
その.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のコンストラクターは呼び出されていません。
もう1つ、ControllerとUserServiceは異なるバンドルに含まれています(プロジェクトを整理するために本当に必要です)が、それでも:他のすべては正常に機能します。
$this->get('doctrine.orm.entity_manager')
UserServiceを取得し、有効な(nullではない)EntityManagerオブジェクトを取得するために使用するのと同じコントローラーで。
構成の一部、またはUserServiceとDoctrine構成の間のリンクが欠落しているようです。