2016-08-01 74 views
2

我嘗試將memcached服務注入到實體存儲庫中,但是我的變體不起作用。Symfony 3將服務注入到實體存儲庫中

services: 
    work.repository.company: 
    class: WorkBundle\Repository\CompanyRepository 
    factory: ['@doctrine.orm.entity_manager', getRepository] 
    arguments: 
     - 'WorkBundle:Company' 
    calls: 
     - [setCacheService, ['@memcache.default']] 

CompanyRepository具有setter setCacheService,但它不被調用。

class CompanyExtension extends \Twig_Extension 
{ 
    /** 
    * @var EntityManager 
    */ 
    private $em; 

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

    public function getFunctions() 
    { 
     return array(
      new \Twig_SimpleFunction('getCompaniesCount', array($this, 'getCompaniesCount')) 
     ); 
    } 

    /** 
    * @return integer 
    */ 
    public function getCompaniesCount() 
    { 
     return $this->em->getRepository('WorkBundle:Company')->getActiveCompaniesCount(); 
    } 

    public function getName() 
    { 
     return 'work_company_extension'; 
    } 
} 

爲什麼這段代碼不起作用?

+0

不好的做法!像這樣顯示:[在symfony中使用memcached手動緩存資源 - 版本1](http://www.inanzzz.com/index.php/post/gbmc/manually-caching-resources-with-memcached-in-symfony-版本1)或[在symfony中使用memcached手動緩存資源 - 版本2](http://www.inanzzz.com/index.php/post/9pst/manually-caching-resources-with-memcached-in-symfony-版本-2) – BentCoder

回答

0

你在WorkBundle:Company實體中註冊了repositoryClass嗎?你的實體應該包含這樣的東西:@ORM\Entity(repositoryClass="Work\Company")或yaml等價物。

您應該讓Symfony通過將work.repository.company注入到Twig擴展中來創建存儲庫。

+1

使用從樹枝延伸的內部結果不會很好。也許你打算建議注入庫而不是注入實體管理器? – Cerad