How to extend twig template from parent bundle?
我正在学习 symfony2 并且非常喜欢它(从 ZendFramework 1.x 迁移),但我现在被 twig 模板所困。你能指出我正确的方向吗?
我的应用程序有很多客户,每个客户都有一些自定义(主要是模板,但也有控制器等)。
我尝试通过捆绑继承来实现这一点/我创建了 ClientBundle,它继承自 BaseBundle 包含所有基本代码和模板……它可以满足我对所有芽模板的需要。当我在 ClientBundle 中创建模板时,它会覆盖来自 BaseBundle 的模板,我无法从 ClientBundle 模板访问来自 BaseBundle 的原始模板。我想扩展父模板,而不是覆盖它...这不可能吗?
谢谢!
使用标准 Symfony extends 表示法来引用父级的包模板会导致致命错误。 Symfony 将您对 BaseBundle 的模板引用解释为 ChildBundle,因为包继承导致函数嵌套级别异常。
您可以使用以下符号直接引用父级的捆绑模板文件:
1
| {% extends"@Client/Foo/bar.html.twig" %} |
代替:
1
| {% extends"ClientBundle:Foo:bar.html.twig" %} |
Twig\\ 的 FilesystemLoader 将引用字符串拆分为命名空间(客户端)和路径(Foo/bar.html.twig)。命名空间是您的捆绑包名称,不带捆绑包后缀。每个命名空间的完整路径通过将默认 <bundle_path>/Resources/views/ 与提供的路径连接来解析。
twig 模板中用于扩展的标准命令是:
1
| {% extends 'BaseBundle::yourTemplate.html.twig' %} |
您可能在子捆绑包中使用相同的模板名称(您的父捆绑包和子捆绑包中可能都有 yourTemplate.html.twig,因此子模板会覆盖父模板)。在这种情况下,您可以重命名您的子模板 (yourTemplate2.html.twig),然后从父模板扩展子模板。有关捆绑继承和树枝模板扩展的更多信息:
http://symfony.com/doc/current/cookbook/bundles/inheritance.html
http://symfony.com/doc/current/book/templating.html
- 是的,我希望模板具有相同的名称...如果我要更改名称,我还需要覆盖相应的操作并更改模板...我正在寻找更优雅的东西。有什么解决办法吗?
-
即使您覆盖模板,您仍然可以使用扩展命令。您是否尝试在子模板中包含 {% extends ... %} 行?
-
是的,我做了/它以包含循环结束。即使我在扩展中使用父包名称,它也不包含父模板:-(
-
在这种情况下,您可以在子包中使用虚拟模板 (tempTemplate.html.twig) 来扩展父模板,然后在子 yourTemplate.html.twig 中扩展虚拟模板,甚至更好地创建 baseYourTemplate.html.twig app/Resources/views 文件夹中的模板,并从那里扩展父模板和子模板。