如何从父包中扩展twig模板?

时间:2014-09-25 17:55:26

标签: symfony templates inheritance twig bundle

我正在学习symfony2并非常喜欢它(从ZendFramework 1.x迁移)但我现在已经陷入了模板的模板。你能指出我正确的方向吗?

我的应用程序有很多客户,每个客户都有一些自定义(主要是模板,还有控制器等)。

我尝试通过bundle继承来实现这一点/我创建了ClientBundle,它继承自BaseBundle,保存所有基本代码和模板......它适用于我需要的所有芽模板。当我在ClientBundle中创建模板时,它覆盖了BaseBundle的模板,我无法从ClientBundle模板访问BaseBundle的原始模板。我想扩展父模板,而不是覆盖它...这不可能吗?

谢谢!

2 个答案:

答案 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