为twig模板定义自定义文件系统路径

use*_*973 2 symfony twig

我已经阅读过Symfony2如何检测从哪里加载模板?网上还有另外一篇文章

问题与我的问题非常相似,但答案并不全面.

我需要在另一个自定义包中覆盖包定义的模板.换句话说,我想指定symfony在加载模板时查看app/Resources之前必须查看的另一条路径.

工作流程应该是这样的:

第一个:/src/My/Bundle/Resources/views/example.html.twig(或/src/My/Bundle/OriginalBundle/views/example.html.twig)

然后:/app/Resources/OriginalBundle/views/example.html.twig

最后:/src/Original/Bundle/Resources/views/example.html.twig

标准app/Resources - > src/Original/Bundle是不够的.

抱歉我的英文不好,谢谢你

Mig*_*ias 9

有一个本机功能,可以很好地完成您想要的任务.你可以在app/config.yml中的twig配置中添加一个twig命名空间,如下所示:

twig:
    # ...
    paths:
        "%kernel.root_dir%/../vendor/acme/foo-bar/templates": foo_bar
Run Code Online (Sandbox Code Playgroud)

vendor/acme/foo-bar/templates将为文件夹创建一个别名,然后您可以使用它来从控制器呈现模板:

return $this->render(
    '@foo_bar/template.html.twig',
    $data
);
Run Code Online (Sandbox Code Playgroud)

或者来自其他树枝模板

{% include '@foo_bar/template.html.twig' %}
Run Code Online (Sandbox Code Playgroud)

资料来源:官方食谱http://symfony.com/doc/current/cookbook/templating/namespaced_pa​​ths.html


azz*_*y81 5

要为树枝模板添加目录,请执行以下操作:

chdir(__DIR__);
$this->container->get('twig.loader')->addPath('../../../../web/templates/', $namespace = '__main__');
Run Code Online (Sandbox Code Playgroud)

这使我可以将树枝模板放在Web文件夹中的“模板”文件夹中,而symfony 2.3加载它们没有问题。