Accès à la base de données dans un écouteur dans Symfony 2
Nous avons besoin d'accéder à la base de données info dans un écouteur.
Nous configurer l'auditeur dans un service.yml
L'auditeur est comme:
namespace company\MyBundle\Listener;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class RequestListener
{
protected $container;
public function __construct(ContainerInterface $container)
{
$this->container = $container;
}
public function onKernelRequest(GetResponseEvent $event)
{
...
Comment pouvons-nous accéder à la doctrine de onKernelRequest fonction?
J'ai essayé de s'étend de contrôleur et de faire:
$em = $this->getDoctrine()->getEntityManager();
et il fonctionne, mais je pense que c'est une mauvaise pratique.
source d'informationauteur Santi
Vous devez vous connecter pour publier un commentaire.
Vous pouvez simplement injecter le conteneur de services. Premier changement du constructeur pour obtenir un EntityManager:
Et ensuite, configurez votre service:
Il semble que vous êtes l'injection du conteneur de services dans le port d'écoute, de sorte que vous pouvez accéder à la Doctrine de cette façon:
Si votre cas d'utilisation, vous permet d'utiliser une Doctrine de l'Écouteur d'Événement directement
vous pouvez obtenir de l'Entité Gestionnaire de l' LifecycleEventArgs:
Je suis un peu un novice à Symfony encore, mais avez-vous essayé de passer le
doctrine
service à votre auditeur au lieu de le conteneur de service?Alternativement, vous êtes déjà passer le conteneur de service, il devrait donc être aussi simple que d'appeler
$this->container->get('doctrine')
. Aussi, on m'a dit sur IRC il y a quelques temps que passer le conteneur de service est généralement considéré comme une mauvaise pratique. Il est préférable de passer les différents services dont vous avez besoin.Je n'aurais pas mis une logique d'entreprise aux auditeurs comme le sont uniquement pour l'écoute d'événements. Et comment voulez-vous écrire des tests pour l'auditeur à l'aide de la doctrine ...
Je l'avais mis de la doctrine de l'accès des choses à une autre classe et ensuite l'appeler dans l'écouteur.