Ich habe meinen eigenen Dienst erstellt und muss die Doktrin EntityManager injizieren, aber ich sehe nicht, dass dies __construct()
für meinen Dienst aufgerufen wird, und die Injektion funktioniert nicht.
Hier ist der Code und die Konfiguration:
<?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
}
}
Hier ist services.yml
in meinem Bundle
services:
test.common.userservice:
class: Test\CommonBundle\Services\UserService
arguments:
entityManager: "@doctrine.orm.entity_manager"
Ich habe diese .yml so config.yml
in meine App importiert
imports:
# a few lines skipped, not relevant here, i think
- { resource: "@TestCommonBundle/Resources/config/services.yml" }
Und wenn ich den Service im Controller anrufe
$userservice = $this->get('test.common.userservice');
$userservice->getUser(123);
Ich erhalte ein Objekt (nicht null), aber $this->em
in UserService ist null, und wie bereits erwähnt, wurde der Konstruktor in UserService nie aufgerufen
Eine weitere Sache, Controller und UserService sind in verschiedenen Paketen (ich brauche das wirklich, um das Projekt organisiert zu halten), aber trotzdem: Alles andere funktioniert gut, ich kann sogar anrufen
$this->get('doctrine.orm.entity_manager')
in demselben Controller, den ich verwende, um UserService abzurufen und ein gültiges (nicht null) EntityManager-Objekt abzurufen.
Sieht so aus, als ob mir eine Konfiguration oder eine Verbindung zwischen UserService und Doctrine config fehlt.
__constructor
der Fehler.