[Symfony2] Impossible d'utiliser l'EntityManager dans un service
Bonjour,
Dans mon projet Symfony2, j'aimerais exécuter une fonction avant chaque appel de contrôleur, quel qu'il soit. Cette fonction manipule la base de données et doit donc avoir accès à l'EntityManager. J'ai donc créé un service en tant que Listener afin qu'il soit appelé avant chaque appel de contrôleur, en ajoutant dans services.yml :
Code:
1 2 3 4 5 6 7
|
services:
site.service_test:
class: Site\TestBundle\Test\ServiceTest
arguments: [@doctrine.orm.entity_manager]
tags:
- { name: kernel.event_listener, event: kernel.controller, method: onKernelController } |
J'ai donc passé l'EntityManager en paramètre du service. Le code du service est le suivant (ce code a été réduit au minimum pour mettre en valeur l'erreur, mais si je parviens à faire fonctionner ce code le reste suivra) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
<?php
namespace Site\TestBundle\Test;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
use Symfony\Component\HttpKernel\HttpKernelInterface;
class ServiceTest
{
public function __construct($em) {
$em->getDoctrine(); // Affiche FatalErrorException: Error: Call to undefined method Doctrine\ORM\EntityManager::getDoctrine() in...
}
public function onKernelController(FilterControllerEvent $event) {
}
} |
Je précise que j'ai volontairement réduit le code, en pratique cette classe contiendra un attribut privé contenant l'EntityManager, on appellera les méthodes de cet attribut pour accéder à Doctrine. Ne cherchez donc pas la logique du code, je veux juste savoir pourquoi ce code simplissime ne fonctionne pas.
Mon problème semble bête mais je suis bloqué depuis un moment dessus, je ne comprend pas pourquoi je ne parviens pas à utiliser l'EntityManager passé en paramètre de service...
Voici ce qu'affiche var_dump($em) si je l'exécute au début du constructeur (je n'affiche que le début car l'affichage est très long) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
object(Doctrine\ORM\EntityManager)[189]
private 'config' =>
object(Doctrine\ORM\Configuration)[202]
protected '_attributes' =>
array (size=12)
'entityNamespaces' =>
array (size=4)
...
'metadataCacheImpl' =>
object(Doctrine\Common\Cache\ArrayCache)[211]
...
'queryCacheImpl' =>
object(Doctrine\Common\Cache\ArrayCache)[210]
...
'resultCacheImpl' =>
object(Doctrine\Common\Cache\ArrayCache)[209]
...
'metadataDriverImpl' =>
object(Doctrine\ORM\Mapping\Driver\DriverChain)[205]
...
'proxyDir' => string 'C:/wamp/www/Site/app/cache/dev/doctrine/orm/Proxies' (length=54)
'proxyNamespace' => string 'Proxies' (length=7)
'autoGenerateProxyClasses' => boolean true
'classMetadataFactoryName' => string 'Doctrine\ORM\Mapping\ClassMetadataFactory' (length=41)
'defaultRepositoryClassName' => string 'Doctrine\ORM\EntityRepository' (length=29)
'namingStrategy' =>
object(Doctrine\ORM\Mapping\DefaultNamingStrategy)[201]
...
'quoteStrategy' =>
object(Doctrine\ORM\Mapping\DefaultQuoteStrategy)[275]
... |
(Ce n'est que le début de l'affichage pour donner une idée, perso je ne vois pas d'où vient l'erreur)
Merci beaucoup à ceux qui pourraient m'aider :zoubi: