使用 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 %}
在编辑时我需要勾选已经有关系的框,我想到了这个解决方案:
{% 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 %}