3

我一直在寻找各种类似的问题和答案,但没有一个适合这个或解决我的问题。我觉得我遗漏了一些明显的东西,因为这似乎非常简单和常见。无论如何:

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

“实体”表单类型似乎是自然的选择,所以我定义了一个表单类型,包括:

    $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") 或其他两打类似问题的建议,都没有任何效果。

我想要的只是一个包含项目数据(名称、价格等)的表格,我不敢相信这有这么难。我错过了什么简单、明显的事情?

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

4

1 回答 1

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>
于 2013-03-07T11:09:06.270 回答