gpt4 book ai didi

Symfony2 : render inside block causes duplicate sub request

转载 作者:行者123 更新时间:2023-12-02 00:15:00 24 4
gpt4 key购买 nike

我有一个带有扩展布局的 Twig 模板的 Sf2 应用程序。在模板中,我想使用 twig 的 render 标签填充一个 block 。不幸的是,render 标记导致两个 子请求,而不是预期的单个请求。但是,如果我将 render 标记放在 block 的外部,一切正常*。

*当然除了结果只是呈现在页面顶部而不是 block 内,但这只是一个额外的子请求。

当且仅当 render 标记放置在一个 block 中时,什么可能导致发出两个子请求?


肮脏的细节

在布局中有一个用于附加导航菜单的 block (topmenu):

layout.twig.html

            <div class="row" id="secondary-nav">
<div class="span12">
{% block topmenu %}{% endblock %}
</div>
</div>

重复子请求示例

这是我的观点,它使用 {% render ... %} 标签通过向“Navigation”发出子请求来填充 topmenu block Controller :

index.html.twig

{% extends "FooBundle::layout.html.twig" %}

{% block topmenu %}
{% render "FooBundle:Navigation:index" with { 'active': 'feedback' } %}
{% endblock %}

到目前为止一切顺利,但是这样做子请求由于某些未知原因发出了两次。它没有显示两次,但我看到 SQL 查询计数增加了,symfony2 分析器也显示了两个相同的子请求。

单个子请求示例

如果我像这样将 {% render ... %} 标签放在任何 block 之外,它只会引起一个子请求:

index.html.twig

{% extends "FooBundle::layout.html.twig" %}

{% render "FooBundle:Navigation:index" with { 'active': 'feedback' } %}

{% block topmenu %}
{% endblock %}

最佳答案

纳尔夫!最后,在这个问题上花了 X 个小时后,我发现我检查了我的 layout.html.twig,看看 topmenu block 是否有任何内容:

{% if block('topmenu') %} ... {% endif %}
...
{% block topmenu %}{% endblock %}

这导致了第二个不需要的子请求。

修复

为了仍然能够检查内容但不请求两次,我首先将 block 加载到变量中然后输出变量而不是使用 {% block topmenu ...%}:

{% set topmenu = block('topmenu') %}
{% if topmenu %} ... {% endif %}
{{ topmenu | raw }}

幸运的是我真的不需要扩展 block ,它只是一个占位符。

关于Symfony2 : render inside block causes duplicate sub request,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13637881/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com