为模块化宏组织嵌套小枝导入



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

目前我们所有的宏都在一个文件中,但我更希望看到这样的东西:

宏观/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 %}这样的命名空间导入,但也失败了。

是否可以像这样嵌套导入的宏?

我认为您需要在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只是子宏的容器你需要在里面定义一个宏才能使用它

最新更新