关于 symfony:如何从父包中扩展树枝模板?

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