我在Twig上使用Symfony 3。
在每条路线中,我都需要打电话给实体:
$posts = $this->getDoctrine()
->getRepository('AppBundle:Posts')
->findAll();
有一种方法可以在全球范围内实现这一目标吗? 并从树枝而不是路线中调用它?
答案 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 %}