symfony2中带有树枝的实体的表视图

时间:2013-03-07 08:38:23

标签: forms symfony twig

我一直在寻找各种类似的问题和答案,但没有一个适合这个或解决我的问题。我觉得我错过了一些明显的东西,因为这似乎很简单而且很常见。反正:

我想构建一个表视图,用户可以从中选择实体以进行进一步处理。显然,我需要显示的不仅仅是一个名称,我想添加大量数据。

'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”)或其他二十几个建议类似的问题,都没有用。

我想要的只是一个包含商品数据(名称,价格等)的表格,我无法相信这是如此困难。我错过了什么简单明了的事情?

我需要使用表单,因为用户需要输入其他数据,我想使用验证。

1 个答案:

答案 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>