Kendi hizmetimi oluşturdum ve EntityManager doktrinini enjekte etmem gerekiyor, ancak bunun __construct()
benim hizmetimde çağrıldığını görmüyorum ve enjeksiyon çalışmıyor.
İşte kod ve yapılandırmalar:
<?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
}
}
İşte services.yml
paketimde
services:
test.common.userservice:
class: Test\CommonBundle\Services\UserService
arguments:
entityManager: "@doctrine.orm.entity_manager"
Bu .yml dosyasını bu şekilde config.yml
uygulamama aktardım
imports:
# a few lines skipped, not relevant here, i think
- { resource: "@TestCommonBundle/Resources/config/services.yml" }
Ve denetleyicide servisi aradığımda
$userservice = $this->get('test.common.userservice');
$userservice->getUser(123);
Bir nesne alıyorum (boş değil), ancak $this->em
UserService'de boş ve daha önce de bahsettiğim gibi, UserService üzerindeki yapıcı hiç çağrılmadı
Bir şey daha, Controller ve UserService farklı paketlerde (projeyi düzenli tutmak için buna gerçekten ihtiyacım var), ancak yine de: her şey yolunda gidiyor, hatta arayabilirim
$this->get('doctrine.orm.entity_manager')
UserService almak ve geçerli (boş değil) EntityManager nesnesi almak için kullandığım aynı denetleyicide.
Görünüşe göre konfigürasyonun bir parçasını veya UserService ile Doctrine yapılandırması arasında bir bağlantı eksik.