2016-10-19 2 views
0

Ich benutze Symfony 3 mit Twig.Symfony Twig Call Continer

In jeder Weg, den ich einen Aufruf an Unternehmen vornehmen müssen:

$posts = $this->getDoctrine() 
->getRepository('AppBundle:Posts') 
->findAll(); 

Es gibt eine Möglichkeit, dass ich diese global tun kann? Und nenne es vom Zweig statt in der Route?

Antwort

1

können Sie einen Dienst schreiben, die es tun und injizieren es als Zweig global

#app/config.yml 
twig: 
    globals: 
     posts_service: '@app_posts_service' 

dann den Dienst definieren

#app/services.yml 
services: 
    app_posts_service: 
     class: AppBundle\Service\PostsService 
     arguments: ["@doctrine"] 

Stellen Sie sicher, Ihre Dienste-Datei in Ihre Konfiguration importiert wird immer:

#app/config.yml 
imports: 
    - { resource: services.yml } 

definieren dann den Dienst:

// src/AppBundle/Service/PostsService.php 
namespace AppBundle\Service; 

class PostsService 
{ 
    protected $doctrine; 
    public function __construct($doctrine) 
    { 
     $this->doctrine = $doctrine; 
    } 

    public function getAllPosts() 
    { 
     return $this->doctrine 
      ->getManager() 
      ->getRepository('AppBundle:Posts') 
      ->findAll(); 
    } 
} 

es dann in jeder Zweig-Datei verwenden, wie:

{%for post in posts_service.getAllPosts() %} 
    {{ post.title }} {# or whatever #} 
{% endfor %} 
+0

Dank! Wenn ich die Zeile zu config.yml hinzufüge, bekomme ich: Der Dienst "Zweig" hat eine Abhängigkeit von einem nicht existierenden Dienst "app_posts_service". – kalites

+0

wroks! groß thatnks – kalites

+0

können Sie mir pm schicken? – kalites

Verwandte Themen