symfony2 twig和多个级别的子文件夹

时间:2012-10-12 08:48:08

标签: php symfony twig

我发现包含此路径的模板正常工作

{% include 'AcmeDemoBundle:TemplateArchive:view.html.twig' with {'data': c.data} %}

虽然这似乎是不允许的:

{% include 'AcmeDemoBundle:TemplateArchive:6:view.html.twig' with {'data': c.data} %}

换句话说,我试图访问我已经整理到我的bundle / resources / views /文件夹中的子文件夹结构的模板。

如果我不允许比第一行的常规单级包含更深入地钻取,是否有另一种/更好的方法来构建这些模板文件?

(文件夹名称'6'表示我想要包含的数据库中的模板ID,它需要是动态的,并且很好地排序在文件夹中......)。

我已尝试命名我的模板文件夹't6',但没有区别,“没有前导字母的数字”不是这里的问题...

3 个答案:

答案 0 :(得分:58)

怎么样?
{% include 'AcmeDemoBundle:TemplateArchive:6/view.html.twig' with {'data': c.data} %}

答案 1 :(得分:5)

两者都有效:

AcmeDemoBundle:TemplateArchive:6/view.html.twig
AcmeDemoBundle:TemplateArchive/6:view.html.twig

答案 2 :(得分:5)

从Symfony 2.2开始,您还可以使用Namespaced paths

{% include '@AcmeDemo/TemplateArchive/6/bar.html.twig' with {'data': c.data} %}

您甚至可以定义自己的命名空间:

# app/config/config.yml
twig:
    # ...
    paths:
        "%kernel.root_dir%/../src/Acme/DemoBundle/Resources/views/TemplateArchive": TemplateArchive

然后使用它:

{% include '@TemplateArchive/6/view.html.twig' with {'data': c.data} %}

这也适用于控制器(也有自定义命名空间):

// TemplateArchiveController.php
return $this->render('@TemplateArchive/6/view.html.twig', ['data' => $c.getData()]);

来自[Symfony Cookbook: Namespaced paths]:

  

作为一个额外的好处,命名空间语法更快。