我一直在寻找各种类似的问题和答案,但没有一个适合这个或解决我的问题。我觉得我错过了一些明显的东西,因为这似乎很简单而且很常见。反正:
我想构建一个表视图,用户可以从中选择实体以进行进一步处理。显然,我需要显示的不仅仅是一个名称,我想添加大量数据。
'entity'表单类型似乎是自然的选择,所以我定义了一个表单类型,包括:
$builder->add('items', 'entity', array(
'multiple'=>true,
'expanded'=>true,
'class'=>'MySiteBundle:Item', 'property'=>'name', 'query_builder'=>function(EntityRepository $er) use ($catagory) {
return $er->createQueryBuilder('s')->where('s.category = :cat')->andWhere('s.available=true')->orderBy('s.name')->setParameters(array('cat'=>$category));
}));
认为这会以某种方式让我访问树枝中的实体。但无论我尝试什么,通过form.items.vars或.get(“value”)或其他二十几个建议类似的问题,都没有用。
我想要的只是一个包含商品数据(名称,价格等)的表格,我无法相信这是如此困难。我错过了什么简单明了的事情?
我需要使用表单,因为用户需要输入其他数据,我想使用验证。
答案 0 :(得分:4)
您无法从表单视图访问entity
类型后面的实体。因此,您需要在单独的查询中获取项目。为简化此操作,请使项目数组的键与其ID相对应。如果您将items
数组发送到模板,则可以这样输出:
<table>
{% for item in form.items %}
{% set id = item.get('value') %}
<tr>
<td>{{ form_widget(item) }}</td>
<td>{{ items[id].name }}</td>
<td>{{ items[id].category.name }}</td>
<td>{{ items[id].available ? 'Yes' : 'No' }}</td>
{# and so on ... #}
</tr>
{% endfor %}
</table>