希望这将是我最后的困惑。
在我的Smarty模板中,我有相当于细枝代码的内容,它根据“show”设置的内容有条件地设置“标题”块。下面插入的模板代码不起作用,它给出了一个错误,说明标题块已经定义好了。我做了一些研究,我发现这不适用于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做这件事的“正确”方法是什么?
再次感谢
发布于 2018-02-13 20:36:59
对,您不能多次定义同一个块,即使它们位于单独的逻辑分支中。
这两项工作都是:
{% 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 %}标签里了吗?
因此,如果将所有代码放入块中,则模板将保持清晰。
https://stackoverflow.com/questions/48774186
复制相似问题