55 votes

Symfony2 Use Doctrine dans Service Container

Comment utiliser Doctrine dans un conteneur de services?

Le code provoque simplement un message d'erreur "Erreur fatale: appel d'une méthode non définie ... :: get ()".

 <?php

namespace ...\Service;

use Doctrine\ORM\EntityManager;
use ...\Entity\Header;

class dsdsf
{ 
    protected $em;

    public function __construct(EntityManager $em)
    {
        $this->em = $em;
    }

    public function create()
    {
        $id = 10;
        $em = $this->get('doctrine')->getEntityManager();
        $em->getRepository('...')->find($id);
    }
}
 

services.yml

 service:
    site:
        class: ...\Service\Site
 

85voto

Elnur Abdurrakhimov Points 23540

En fonction de votre code, vous avez déjà un EntityManager injecté. Vous n'avez pas besoin d'appeler $em = $this->get('doctrine')->getEntityManager() - utilisez $this->em.

Si vous n'avez pas injecter EntityManager déjà, lisez ceci.

Mise à JOUR:

Vous avez besoin de faire le conteneur injecter EntityManager dans votre service. Voici un exemple de le faire dans config.yml:

services:
    your.service:
        class: YourVendor\YourBundle\Service\YourService
        arguments: [ @doctrine.orm.entity_manager ]

Je préfère définir des séries de services dans leur propre services.yml fichiers, mais c'est un peu plus avancé, donc à l'aide d' config.yml est assez bon pour obtenir commencé.

10voto

MaXxer90 Points 41

Pour accéder facilement à Entitymanager, utilisez celui-ci:

 //services.yml
  your service here:
    class: yourclasshere
    arguments: [@doctrine.orm.entity_manager]
 

Et dans la classe:

 class foo
{
  protected $em:

  //Do the Database stuff
  $query = $this->em->createQueryBuilder()

  //Your Query goes here

  $result = $query->getResult();

  public function __construct(\Doctrine\ORM\EntityManager $em)
  {
    $this->em = $em;
  }
}
 

C’est ma première réponse donc tous les commentaires sont appréciés :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X