Symfony Twig Call Continer

时间:2016-10-19 17:50:35

标签: symfony twig

我在Twig上使用Symfony 3。

在每条路线中,我都需要打电话给实体:

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

有一种方法可以在全球范围内实现这一目标吗? 并从树枝而不是路线中调用它?

1 个答案:

答案 0 :(得分:1)

您可以编写一个可以执行此操作的服务并将其作为twig global注入

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

然后定义服务

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

确保您的服务文件已导入您的配置:

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

然后定义服务:

// 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();
    }
}

然后在任何树枝文件中使用它,如:

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