2016-03-21 3 views
1

habe ich einige Probleme während der Behälter insinde einem EntityRepository ZugriffSymfony3 - Get Container in EntityRepository

Mein services.yml

services: 
    app.event_repository: 
     class: Test\MyTestBundle\Repository\EventRepository 
     factory: ["@doctrine", "getRepository"] 
     arguments: ["MyTestBundle:Event"] 
     calls: 
      - ["setContainer", ["@service_container"]] 

Und mein Repository

class EventRepository extends EntityRepository 
{ 
    protected $container; 

    public function setContainer(ContainerInterface $container = null) 
    { 
     $this->container = $container; 
    } 

    public function getSomething($id) 
    { 
     var_dump($this->container);die(); // returns null 
    } 

... 

Wenn ich versuchen, zuzugreifen th Behälter, es ist immer "null". Ich weiß, dass es einige gleiche Fragen gibt, aber ich kann immer noch keine Lösung für mein Problem finden.

Es scheint, dass die Methode "setContainer()" nie aufgerufen wird.

PS: Ich benutze Symfony3

+1

ersetzen ATdoctrine mit ATdoctrine.orm.entity_manager. Der übliche Vorbehalt gilt, übergeben Sie den Container nicht, es sei denn, Sie benötigen ihn wirklich. Am besten injizieren Sie nur die Dienste, die Sie benötigen. Ich gehe auch davon aus, dass Sie das Repository tatsächlich aus dem Container ziehen und $ em-> getRepository nicht direkt verwenden. – Cerad

+0

Dies ist definitiv kein Duplikat und die verknüpfte vorgeschlagene Antwort ist nicht anwendbar. Der Titel mag ein wenig irreführend sein, aber das Problem ist, dass der Repository-Dienst falsch definiert ist. Außerdem sind die verschiedenen verknüpften Antworten einfach falsch. – Cerad

Antwort

0

vielleicht verwenden:

use Symfony\Component\DependencyInjection\ContainerAwareInterface; 
use Symfony\Component\DependencyInjection\ContainerInterface; 

class EventRepository extends EntityRepository implements ContainerAwareInterface 
{ 
    protected $container; 

    public function setContainer(ContainerInterface $container = null) 
    { 
     $this->container = $container; 
    } 

    public function getSomething($id) 
    { 
     var_dump($this->container);die(); // returns null 
    } 

... 
+0

Danke, aber es ändert nichts. Das ContainerAwareInterface ist nur eine Schnittstelle ohne Logik. – luggi