J'ai créé mon propre service et j'ai besoin d'injecter la doctrine EntityManager, mais je ne vois pas que __construct()
est appelé sur mon service, et l'injection ne fonctionne pas.
Voici le code et les configurations :
<?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
}
}
Voici services.yml
dans mon baluchon
services:
test.common.userservice:
class: Test\CommonBundle\Services\UserService
arguments:
entityManager: "@doctrine.orm.entity_manager"
J'ai importé ce fichier .yml dans config.yml
dans mon application comme ça
imports:
# a few lines skipped, not relevant here, i think
- { resource: "@TestCommonBundle/Resources/config/services.yml" }
Et quand j'appelle le service dans le contrôleur
$userservice = $this->get('test.common.userservice');
$userservice->getUser(123);
J'obtiens un objet (non nul), mais $this->em
dans UserService est null, et comme je l'ai déjà mentionné, le constructeur de UserService n'a jamais été appelé
Une dernière chose, Controller et UserService sont dans des bundles différents (j'ai vraiment besoin de cela pour garder le projet organisé), mais malgré cela, tout le reste fonctionne bien, je peux même appeler
$this->get('doctrine.orm.entity_manager')
dans le même contrôleur que celui que j'utilise pour obtenir UserService et obtenir un objet EntityManager valide (non nul).
On dirait qu'il me manque un élément de configuration ou un lien entre la configuration de UserService et de Doctrine.