我已经阅读了How does Symfony2 detect where to load templates from?以及网上的其他文章
问题与我的问题非常相似,但答案并不全面。
我需要在另一个自定义包中覆盖包定义的模板。换句话说,我想指定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
标准应用/资源 - > src / Original / Bundle是不够的。
抱歉,我的英语很差,谢谢你答案 0 :(得分:9)
有一个本机功能可以很好地完成您想要的功能。您可以在app / config.yml中的twig配置中添加一个twig命名空间,如下所示:
twig:
# ...
paths:
"%kernel.root_dir%/../vendor/acme/foo-bar/templates": foo_bar
这会为文件夹vendor/acme/foo-bar/templates
创建一个别名,然后您可以使用它来从控制器渲染模板:
return $this->render(
'@foo_bar/template.html.twig',
$data
);
或其他树枝模板
{% include '@foo_bar/template.html.twig' %}
资料来源:官方食谱http://symfony.com/doc/current/cookbook/templating/namespaced_paths.html
答案 1 :(得分:4)
要为twig模板添加目录,请执行以下操作:
chdir(__DIR__);
$this->container->get('twig.loader')->addPath('../../../../web/templates/', $namespace = '__main__');
这允许我将树枝模板放在名为' templates'的文件夹中。在web文件夹和symfony 2.3加载它们没有问题。
答案 2 :(得分:2)
负责加载twig模板的类存储在服务标识twig.loader
中,默认情况下是Symfony\Bundle\TwigBundle\Loader\FilesystemLoader
的实例,并存储定位模板的类在服务标识templating.locator
,默认情况下是类Symfony\Bundle\FrameworkBundle\Templating\Loader\TemplateLocator
的实例(它本身作为twig.loader
的第一个参数注入)
所以,理论上,您需要做的就是编写自己的类来实现Symfony\Component\Config\FileLocatorInterface
(或扩展Symfony\Bundle\FrameworkBundle\Templating\Loader\TemplateLocator
),然后通知配置使用您的类(我将要使用查找如何为您完成此操作,但Symfony的网站现在已经关闭了)