当您将宏导入 Twig 模板然后扩展该模板时,子可以使用该宏。例如,我们定义一个宏:
ExampleBundle::macros.html.twig:
{% macro echoSomeText(input) %}
{{ input }}
{% endmacro %}
在我们计划扩展的模板中,我们导入宏:
ExampleBundle::base.html.twig:
{% import 'ExampleBundle:macros.html.twig' as macros %}
在某些模板中,我们扩展了基本模板并使用了宏:
ExampleBundle::othertemplate.html.twig:
{% extends 'ExampleBundle::base.html.twig' %}
{{ macros.echoSomeText('Hello!') }}
这一切都很好。但是,如果我将基本模板更改为使用from
标签而不是import
:
{% from 'ExampleBundle:macros.html.twig' import echoSomeText %}
我不再能够访问子模板中的宏。
我试图找到并理解这方面的文档,但我运气不佳。我的假设是这不是一个错误,而是与 Twig 如何处理命名空间和import ... as
语法将宏作为变量插入可扩展命名空间有关,但这只是一个猜测。
有谁知道为什么这些标签的行为不同,以及它是如何工作的?
我最终寻找的是一种将许多常用宏导入基本模板的干净方法,然后我可以在整个子模板中使用它,但无需为每个模板分配唯一的名称。换句话说,我试图避免通过macroA.macroName
,macroB.otherName
等调用它们,并且更愿意将它们称为macroName
等等otherName
。