Symfony Twig模板多层for循环嵌套导致球员分类数据异常显示问题咨询
问题根因
你当前使用的多层嵌套{% for %}属于笛卡儿积遍历逻辑,只要任意一个球员分类的数组为空,整个循环就不会执行,这就是部分分类无数据时所有内容都不渲染的核心原因。
调整后代码
你可以先统计所有分类数组的最大长度,按索引独立读取每个分类的球员,代码如下:
<tbody> {# 计算所有球员分类的最大长度,作为总遍历次数 #} {% set maxLength = [defensers|length, midfielders|length, forwards|length, goalkeepers|length]|max %} {% for index in 0..maxLength - 1 %} <tr> <td> <div class="player-in-club"> {% set gk = goalkeepers[index]|default(null) %} {% if gk %} <a href="{{ path('show_player', {'id': gk.id }) }}">{{ gk.name }}</a> {% endif %} </div> </td> <td> <div class="player-in-club"> {% set defenser = defensers[index]|default(null) %} {% if defenser %} <a href="{{ path('show_player', {'id': defenser.id }) }}">{{ defenser.name }}</a> {% endif %} </div> </td> <td> <div class="player-in-club"> {% set midfielder = midfielders[index]|default(null) %} {% if midfielder %} <a href="{{ path('show_player', {'id': midfielder.id }) }}">{{ midfielder.name }}</a> {% endif %} </div> </td> <td> <div class="player-in-club"> {% set forward = forwards[index]|default(null) %} {% if forward %} <a href="{{ path('show_player', {'id': forward.id }) }}">{{ forward.name }}</a> {% endif %} </div> </td> </tr> {% endfor %} </tbody>
逻辑说明
- 遍历次数由人数最多的分类决定,不会因为某分类人数少就截断其他分类的展示
- 每个分类的球员读取完全独立,哪怕某分类没有任何数据,其他分类的球员也会正常渲染
- 无对应球员的位置会自动留空,如果你需要展示占位提示,在
{% if %}的else分支添加对应提示文本即可。
内容的提问来源于stack exchange,提问作者Leïllah
相关产品推荐
相关产品推荐

