2016-08-01 7 views
2

Ich habe versucht injec memcached Service in Entität Repository, aber meine Variante funktioniert nicht.Symfony 3 Service in Entity-Repository injizieren

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

CompanyRepository haben SetCacheService, aber es wird nicht aufgerufen.

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'; 
    } 
} 

Warum funktioniert dieser Code nicht?

+0

Schlechte Praxis! Wie hier gezeigt: [Manuelles Zwischenspeichern von Ressourcen mit memcached in Symfony - Version 1] (http://www.inanzzz.com/index.php/post/gbmc/manually-caching-resources-with-memcached-in-symfony- Version-1) oder [Manuelles Zwischenspeichern von Ressourcen mit memcached in Symfony - Version 2] (http://www.inanzzz.com/index.php/post/9pst/manually-caching-resources-with-memcached-in-symfony- Version-2) – BentCoder

Antwort

0

Haben Sie repositoryClass in Ihrer WorkBundle:Company Einheit registriert? Ihre Entität sollte etwas enthalten wie: @ORM\Entity(repositoryClass="Work\Company") oder Yaml-Äquivalent.

Sie sollten Symfony das Repository erstellen lassen, indem Sie work.repository.company in Ihre Twig-Erweiterung injizieren.

+1

Der Gebrauch von innen aus einer Zweigverlängerung wird nicht gut enden. Vielleicht wollten Sie vorschlagen, das Repository zu injizieren, statt den Entity Manager zu injizieren? – Cerad

Verwandte Themen