J'ai créé mon propre service et j'ai besoin d'injecter doctrine EntityManager, mais je ne vois pas que cela __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 bundle
services:
test.common.userservice:
class: Test\CommonBundle\Services\UserService
arguments:
entityManager: "@doctrine.orm.entity_manager"
J'ai importé ce .yml 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);
$this->em
J'obtiens un objet (non nul), mais dans UserService est nul, et comme je l'ai déjà mentionné, le constructeur sur UserService n'a jamais été appelé
Encore une chose, Controller et UserService sont dans différents bundles (j'en ai vraiment besoin pour garder le projet organisé), mais quand même: tout le reste fonctionne bien, je peux même appeler
$this->get('doctrine.orm.entity_manager')
dans le même contrôleur que j'utilise pour obtenir UserService et obtenir un objet EntityManager valide (non nul).
On dirait qu'il me manque un morceau de configuration ou un lien entre UserService et Doctrine config.