Symfony 有没有办法包括模板和隐藏他的一些块

Symfony 有没有办法包括模板和隐藏他的一些块,symfony,Symfony,也许这个问题可以转化为两个问题: 如果我在at.html.twig中包含了一个模板,我可以控制在包含的twig中显示或隐藏一些块吗 我可以从几个细枝布局中扩展一个细枝吗?我不确定这是否是您要寻找的,您的描述有点模糊,所以我将坚持这个问题 你可以用中间模板来解决这个问题。 不能直接包含模板并修改其块AFAIK,但可以创建第二个模板,扩展第一个模板并删除块,然后在需要时包含第二个模板 假设这是您最初想要包含的模板: <div> This is the template you w

也许这个问题可以转化为两个问题:

如果我在at.html.twig中包含了一个模板,我可以控制在包含的twig中显示或隐藏一些块吗


我可以从几个细枝布局中扩展一个细枝吗?

我不确定这是否是您要寻找的,您的描述有点模糊,所以我将坚持这个问题

<>你可以用中间模板来解决这个问题。

不能直接包含模板并修改其块AFAIK,但可以创建第二个模板,扩展第一个模板并删除块,然后在需要时包含第二个模板

假设这是您最初想要包含的模板:

<div>
    This is the template you want to include (articleDetails.html.twig)
    {% block article %}
        This is some content you want to delete
    {% endblock article %}
</div>
然后,不包括articleDetails,您可以包括第二个模板emptyArticle,您将获得第一个模板的内容,但不包括文章块的内容。
您可以使用任意数量的块执行此操作。

您可以在include中传递变量

{% include 'template.html' with {'foo': 'bar'} %}
在template.html中,检查'foo'的值,并根据该值显示/隐藏块

或者,如果您有更复杂的模板,您可以拆分它们并在控制器中调用它们

{% render url('latest_articles', { 'view': 2 }) %}

public function recentArticlesAction($view = 1) {
    // make a database call or other logic
    // to get the "$max" most recent articles
    $articles = ...;

    if($view == 2) {
        return $this->render(
           'AcmeArticleBundle:Article:recentList.html.twig',
            array('articles' => $articles)
        );
    }
    return $this->render(
        'AcmeArticleBundle:Article:recentList2.html.twig',
        array('articles' => $articles)
    );
}

这已经超过了这个问题的“截止日期”,但为了防止其他人有类似的问题,我在包含的模板中使用了细枝变量来解决这个问题

{% set myConditionalBlockToShow %}
    <span>some interesting things {{ withVariable }}</span>
{% endset %}

{% if myCondition %}
    {{ myConditionalBlockToShow }}
{% endif %}

我和一位同事刚刚发现了一件很酷的事情,它与这个问题有某种联系

例如,如果仅在调用renderBlock Twig方法而不是扩展模板时渲染块,则可以使用此技巧

{%if false%} {%block subject%} 主题信息 {%endblock%} {%endif%}

当您像这里->一样调用renderBlock时,该块将被渲染,因为该方法不关心其他语句

但是,当您扩展时,将永远不会显示此块


例如,当您有一些其他电子邮件模板正在扩展的基本默认电子邮件模板时,这将非常有用。您可以在块中包装一些默认的电子邮件主题,并且该块不需要显示在其他模板上。

这是扩展,不包括。include-means-include,比如:{%include'AcmeArticleBundle:Article:articleDetails.html.twig'和{'Article':Article}%}见symfony网站。所以我的问题是,我们是否可以隐藏类似于扩展模板的内容?您应该包括第二个模板,请仔细阅读说明。注意,您可以使用{{parent}}甚至{%set parentBlock=parent%}来呈现或访问父块内容的字符串,在子块中,然后通过编程操作该子块。
{% set myConditionalBlockToShow %}
    <span>some interesting things {{ withVariable }}</span>
{% endset %}

{% if myCondition %}
    {{ myConditionalBlockToShow }}
{% endif %}