嵌套Twig导入用于模块化宏组织

时间:2014-05-08 15:20:38

标签: twig

我想将一组Twig宏分解为单个文件,然后使用库文件导入它们以收集所有import语句。

目前我们所有的宏都在一个文件中,但我更喜欢看到这样的内容:

的宏/ hello.twig

{% macro hello() %}
    Hello
{% endmacro %}

的宏/ goodbye.twig

{% macro goodbye() %}
    Goodbye
{% endmacro %}

macro_lib.twig

{% import "macro/hello.twig" as hello %}
{% import "macro/goodbye.twig" as goodbye %}

基本模板应该只导入macro_lib.twig,但这不起作用:

{% import "macro_lib.twig" as lib %}
{{ lib.hello.hello() }}

但是尝试调用嵌套的宏会返回Fatal error: Call to undefined method __TwigTemplate_d7...30::gethello()

我也尝试过类似{% from "macro/hello.twig" import hello as hello %}的命名空间导入,但那些也失败了。

是否可以嵌套导入的宏?

1 个答案:

答案 0 :(得分:0)

我认为您需要将macro_lib.twig中的宏定义为

{% macro lib() %}
   {% import "macro/hello.twig" as hello %}
   {% import "macro/goodbye.twig" as goodbye %}
{% endmacro %}

然后你就可以调用子宏

{% import "macro_lib.twig" as lib %}
{{ lib.hello.hello() }}

因为你拥有的macro_lib.twig只是一个子宏的容器,你需要在里面定义一个宏才能使用它