独自のサービスを作成し、Doctrine 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"
私はそのconfig.yml
ような.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構成の間のリンクが欠落しているように見えます。