Saya telah membuat layanan saya sendiri dan saya perlu memasukkan EntityManager doktrin, tetapi saya tidak melihat itu __construct()
dipanggil di layanan saya, dan injeksi tidak berfungsi.
Ini kode dan konfigurasinya:
<?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
}
}
Ini services.yml
di bundel saya
services:
test.common.userservice:
class: Test\CommonBundle\Services\UserService
arguments:
entityManager: "@doctrine.orm.entity_manager"
Saya telah mengimpor .yml itu di config.yml
aplikasi saya seperti itu
imports:
# a few lines skipped, not relevant here, i think
- { resource: "@TestCommonBundle/Resources/config/services.yml" }
Dan ketika saya memanggil layanan di pengontrol
$userservice = $this->get('test.common.userservice');
$userservice->getUser(123);
Saya mendapatkan objek (bukan null), tetapi $this->em
di UserService adalah null, dan seperti yang telah saya sebutkan, konstruktor di UserService tidak pernah dipanggil
Satu hal lagi, Controller dan UserService berada dalam bundel yang berbeda (saya benar-benar membutuhkannya agar proyek tetap teratur), tetapi tetap saja: semuanya berfungsi dengan baik, saya bahkan dapat menelepon
$this->get('doctrine.orm.entity_manager')
dalam kontroler yang sama yang saya gunakan untuk mendapatkan UserService dan mendapatkan objek EntityManager yang valid (bukan null).
Sepertinya saya kehilangan bagian konfigurasi atau beberapa link antara UserService dan konfigurasi Doctrine.
__constructor
juga kesalahannya.