Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何检查Twig中是否覆盖了块?_Php_Symfony_Twig - Fatal编程技术网

Php 如何检查Twig中是否覆盖了块?

Php 如何检查Twig中是否覆盖了块?,php,symfony,twig,Php,Symfony,Twig,我想检查是否在子模板中重写了块 template.html.twig: <html> ... <nav class="menu"> {% block menu %} {% endblock %} </nav> ... <div class="contents"> {% block contents %} {% endblock %} &l

我想检查是否在子模板中重写了块

template.html.twig

<html>
    ...
    <nav class="menu">
        {% block menu %}
        {% endblock %}
    </nav>
    ...
    <div class="contents">
        {% block contents %}
        {% endblock %}
    </div>
    ...
</html>
page2.html.twig
——不包含菜单:

{% extends '::template.html.twig' %}

{% block contents %}
    Hello World!
{% endblock %}
我想在模板中显示
nav
元素,前提是它在子模板中被重写(目标是避免出现空的
元素)

Twig语法有一个
为空的测试,但它只适用于变量,而不适用于块


我做错了什么?

您可以在子模板检查中设置一个变量:

{# template.html.twig #}

{% if show_menu is not empty %}
<nav class="menu">
    {% block menu %}
    {% endblock %}
</nav>
{% endif %}

也许你也应该考虑将这个标记放在块定义中,以更直接的方式。

你可以向你的导航元素添加一个包装器,然后在PGE2中重写它,当你不想要一个菜单时使它成为空白。这不需要额外的变量

template.html.twig

... snip ...
{% block nav %}
<nav class="menu">
    {% block menu %}
    {% endblock %}
</nav>
{% endblock %}
... snip ...
{% extends '::template.html.twig' %}

{% block nav '' %} {# here's the kicker ... #}

{% block contents %}
    Hello World!
{% endblock %}

在任何其他有菜单的页面中,您将继续正常覆盖“菜单”块。

我希望有一种方法可以做到这一点,而不必使用这些技巧。也许我们没有以正确的方式解决这个问题。。。
... snip ...
{% block nav %}
<nav class="menu">
    {% block menu %}
    {% endblock %}
</nav>
{% endblock %}
... snip ...
{% extends '::template.html.twig' %}

{% block nav '' %} {# here's the kicker ... #}

{% block contents %}
    Hello World!
{% endblock %}