2016-03-21 189 views
1

獲取集裝箱我得到了一些麻煩,同時訪問容器insinde的EntityRepositorySymfony3 - 在EntityRepository

我services.yml

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

而且我的倉庫

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 
    } 

... 

當我嘗試訪問th容器,它總是「空」。我知道有一些同樣的問題,但我仍然無法找到解決問題的方法。

看來,方法「setContainer()」永遠不會被調用。

PS:我用Symfony3

+1

與ATdoctrine.orm.entity_manager更換ATdoctrine。通常的警告適用,除非你確實需要,否則不要通過容器。最好只注入你需要的服務。我還假設你實際上是從容器中拉取存儲庫,而不是直接使用$ em-> getRepository。 – Cerad

+0

這絕對不是重複的,並且鏈接的建議答案不適用。標題可能有點誤導,但問題在於存儲庫服務的定義不正確。另外,各種相關的答案顯然是錯誤的。 – Cerad

回答

0

也許用這個:

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

謝謝,但它沒有改變任何東西。 ContainerAwareInterface只是一個沒有任何邏輯的接口。 – luggi