Symfony+Twig开发:如何在模板中显示单篇文章所属的分类名称
问题根因
你当前模板的写法是遍历所有全局分类,只要分类下有文章就输出名称,所以会出现每个文章卡片都展示全部分类的问题,完全没有和当前文章做关联匹配。
由于你在Article实体中已经定义了和Category的多对多关联,getCategory()方法可以直接返回当前文章关联的所有分类集合,不需要依赖全局的categories变量就能获取对应分类。
解决方案
直接替换模板中caption区块的原有分类遍历代码即可,以下是两种可选写法:
写法1:循环写法(更易理解)
<div class="caption"> {% for category in article.category %} <span class="fontz-text glow">分类: {{ category.name }}</span> {% if not loop.last %}, {% endif %} {% else %} <span class="fontz-text glow">暂无分类</span> {% endfor %} </div>
写法2:过滤器写法(代码更简洁)
<div class="caption"> {% if article.category is not empty %} <span class="fontz-text glow">分类: {{ article.category|map(cat => cat.name)|join(', ') }}</span> {% else %} <span class="fontz-text glow">暂无分类</span> {% endif %} </div>
如果需要在单篇文章详情页(show/index.html.twig)显示分类,使用相同语法即可。
可选优化
你HomeController的构造方法已经注入了ArticleRepository和CategoryRepository,index方法里不需要再通过getDoctrine()->getRepository()重复获取仓储对象,冗余代码可以直接删除,功能不受影响。
内容的提问来源于stack exchange,提问作者TBA
相关产品推荐
相关产品推荐

