我正在学习symfony2并非常喜欢它(从ZendFramework 1.x迁移)但我现在已经陷入了模板的模板。你能指出我正确的方向吗?
我的应用程序有很多客户,每个客户都有一些自定义(主要是模板,还有控制器等)。
我尝试通过bundle继承来实现这一点/我创建了ClientBundle
,它继承自BaseBundle
,保存所有基本代码和模板......它适用于我需要的所有芽模板。当我在ClientBundle
中创建模板时,它覆盖了BaseBundle
的模板,我无法从ClientBundle
模板访问BaseBundle
的原始模板。我想扩展父模板,而不是覆盖它...这不可能吗?
谢谢!
答案 0 :(得分:3)
使用标准Symfony extends
表示法来引用父级的包模板会导致致命错误。 Symfony将您对BaseBundle
的模板引用解释为ChildBundle
,因为bundle继承会导致函数嵌套级别异常。
您可以使用以下表示法直接引用父代的包模板文件:
{% extends "@Client/Foo/bar.html.twig" %}
取代:
{% extends "ClientBundle:Foo:bar.html.twig" %}
Twig的FilesystemLoader
将引用字符串拆分为命名空间(客户端)和路径(Foo / bar.html.twig)。命名空间是没有Bundle后缀的包名称。通过将默认<bundle_path>/Resources/views/
与提供的路径连接,可以解决每个命名空间的完整路径。
答案 1 :(得分:1)
扩展的twig模板中的标准命令是:
{% extends 'BaseBundle::yourTemplate.html.twig' %}
您可能在子包中使用相同的名称作为模板(您的父包和子包中可能都有yourTemplate.html.twig,因此子模板会覆盖父包)。在这种情况下,您可以重命名子模板(yourTemplate2.html.twig),然后从父模板扩展子模板。有关bundle继承和twig模板扩展的更多信息: http://symfony.com/doc/current/cookbook/bundles/inheritance.html http://symfony.com/doc/current/book/templating.html