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

Mat*_*der 33 php symfony twig

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

{% include 'AcmeDemoBundle:TemplateArchive:view.html.twig' with {'data': c.data} %}
Run Code Online (Sandbox Code Playgroud)

虽然这似乎是不允许的:

{% include 'AcmeDemoBundle:TemplateArchive:6:view.html.twig' with {'data': c.data} %}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Pat*_*and 58

关于什么

{% include 'AcmeDemoBundle:TemplateArchive:6/view.html.twig' with {'data': c.data} %}
Run Code Online (Sandbox Code Playgroud)


ben*_*h-o 5

两者都有效:

AcmeDemoBundle:TemplateArchive:6/view.html.twig
AcmeDemoBundle:TemplateArchive/6:view.html.twig
Run Code Online (Sandbox Code Playgroud)

  • 因为``Bundle:Subdir:filename.html.twig``是Symfony所期待的(参见[Symfony Cookbook](http://symfony.com/doc/current/cookbook/templating/namespaced_pa​​ths.html))我d使用``AcmeDemoBundle:TemplateArchive/6:view.html.twig``. (2认同)

flu*_*flu 5

从Symfony 2.2开始,您还可以使用Namespaced路径:

{% include '@AcmeDemo/TemplateArchive/6/bar.html.twig' with {'data': c.data} %}
Run Code Online (Sandbox Code Playgroud)

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

# app/config/config.yml
twig:
    # ...
    paths:
        "%kernel.root_dir%/../src/Acme/DemoBundle/Resources/views/TemplateArchive": TemplateArchive
Run Code Online (Sandbox Code Playgroud)

然后使用它像:

{% include '@TemplateArchive/6/view.html.twig' with {'data': c.data} %}
Run Code Online (Sandbox Code Playgroud)

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

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

从[ Symfony Cookbook:Namespaced paths ]:

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