使用 Symfony2 在 Twig 中进行多对多检查

Many-to-many checking in Twig with Symfony2

在编辑时我需要勾选已经有关系的框,我想到了这个解决方案:

{% for c in categories %}
    {% set checked = false %}
    {% for p in c.posts %}
        {% if p.id == post.id %}
            {% set checked = true %}
        {% endif %}
    {% endfor %}
    <input type='checkbox' value='categories[{{ c.id }}]'{% if checked %} checked='checked'{% endif %}>{{ c.name }}
{% endfor %}

它正在运行,但可以用更好的方式完成吗?

我认为这可能有效: 在 php:

$catIds = [];
foreach($post->getCategories() as $cat){
  $catIds[] = $cat->getId();
}

将此 $catIds 传递给 twig,然后传递给 twig:

{% for c in categories %}
    <input type='checkbox' value='categories[{{ c.id }}]'
        {% if c.id in catIds %} checked='checked'{% endif %}
    />
    {{ c.name }}
{% endfor %}

可以使用collections的contains()方法:

{% for c in categories %}
    <input type='checkbox' value='categories[{{ c.id }}]'{% if c.posts.contains(post) %} checked='checked'{% endif %}>{{ c.name }}
{% endfor %}