根据我在网上阅读的内容,应该可以在 Twig 扩展文件中创建 Doctrine 连接。我想创建一个带有过滤器的扩展,它将接收类别的 id,然后返回该类别在数据库中建立的类别树中的位置。
树枝扩展文件:
(Symfony/src/MyProject/AdminBundle/Twig/MyExtension.php)
<?php
namespace MyProject\AdminBundle\Twig;
class ToolboxExtension extends \Twig_Extension
{
protected $em;
public function __construct($em)
{
$this->em = $em;
}
public function getFilters()
{
return array(
new \Twig_SimpleFilter('path', array($this, 'categoryPath'))
);
}
public function categoryPath($category_id) {
$repository = $this->$em->getRepository('MyProjectAdminBundle:Category');
$category = $repository->findOneById($category_id);
$path = $repository->getPath($category);
return implode(">", $path);
return $category;
}
public function getName()
{
return 'toolbox_extension';
}
}
服务配置文件:
(Symfony/src/MyProject/AdminBundle/Resources/config/services.yml)
services:
myproject.twig.toolbox_extension:
class: MyProject\AdminBundle\Twig\MyExtension
tags:
- { name: twig.extension }
arguments:
em: "@doctrine.orm.entity_manager"
但是每当我使用这个过滤器 categoryPath 时,Twig 就会崩溃。所以模板只在第一次使用这个扩展之前加载。