在我的Smarty模板中,我有什么等同于下面的树枝代码,它根据设置的'show'有条件地设置'heading'块。我在下面插入的模板代码不起作用,它给出了一个错误,说明已经定义了标题块。我做了一些研究,我发现这不适用于Twig,我想是因为它在检查if语句之前编译它对我来说完全反直觉但我没有创建Twig。 =)
{% if show is defined %}
{% if show == 'add_form' %}
{% block heading %}Add{% endblock %}
{% elseif show == 'main' %}
{% block heading %}Main{% endblock %}
{% endif %}
我只在模板中使用这种风格,其中有一堆非常微小的视图(实际上是2-3行HTML),所以我想我可以为每个模板制作单独的模板文件,但这看起来像一吨额外的文件。 在Twig中这样做的“正确”方法是什么?
再次感谢
答案 0 :(得分:0)
是的,即使它们位于不同的逻辑分支中,也无法多次定义同一个块。
这两种方法都有效:
{% if show is defined %}
{% block heading %}
{% if show == 'add_form' %}
Add
{% elseif show == 'main' %}
Main
{% endif %}
{% endblock %}
{% endif %}
{% block heading %}
{% if show is defined %}
{% if show == 'add_form' %}
Add
{% elseif show == 'main' %}
Main
{% endif %}
{% endif %}
{% endblock %}
我认为第二个更清晰(至少在这种情况下),因为扩展另一个模板的模板不能包含Twig块之外的内容。这意味着如果你尝试做这样的事情:
{% extends 'layout.twig' %}
{% block heading %}
Some content
{% endblock %}
Hello world!
您将收到此消息的Twig_Error_Syntax
异常:
扩展另一个模板的模板不能包含Twig块之外的内容。您是否忘记将内容放在
{% block %}
标记内?
因此,如果将所有代码放在块中,模板将保持清晰。