Ho creato il mio servizio e ho bisogno di iniettare doctrine EntityManager, ma non vedo che __construct()
viene chiamato sul mio servizio e l'iniezione non funziona.
Ecco il codice e le configurazioni:
<?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
}
}
Qui è services.yml
nel mio pacchetto
services:
test.common.userservice:
class: Test\CommonBundle\Services\UserService
arguments:
entityManager: "@doctrine.orm.entity_manager"
Ho importato quel .yml config.yml
nella mia app in questo modo
imports:
# a few lines skipped, not relevant here, i think
- { resource: "@TestCommonBundle/Resources/config/services.yml" }
E quando chiamo l'assistenza nel controller
$userservice = $this->get('test.common.userservice');
$userservice->getUser(123);
Ottengo un oggetto (non nullo), ma $this->em
in UserService è nullo e, come ho già detto, il costruttore su UserService non è mai stato chiamato
Un'altra cosa, Controller e UserService sono in bundle diversi (ne ho davvero bisogno per mantenere il progetto organizzato), ma comunque: tutto il resto funziona bene, posso persino chiamare
$this->get('doctrine.orm.entity_manager')
nello stesso controller che uso per ottenere UserService e ottenere un oggetto EntityManager valido (non nullo).
Sembra che mi manchi un pezzo di configurazione o qualche collegamento tra UserService e Doctrine config.
__constructor
è l'errore.