1

当您将宏导入 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

4

0 回答 0