我已经阅读过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是不够的.
抱歉我的英文不好,谢谢你
有一个本机功能,可以很好地完成您想要的任务.你可以在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_paths.html
要为树枝模板添加目录,请执行以下操作:
chdir(__DIR__);
$this->container->get('twig.loader')->addPath('../../../../web/templates/', $namespace = '__main__');
Run Code Online (Sandbox Code Playgroud)
这使我可以将树枝模板放在Web文件夹中的“模板”文件夹中,而symfony 2.3加载它们没有问题。