如何在Symfony 2.0中处理多个嵌套的表单集合?

时间:2011-09-07 15:41:55

标签: forms collections symfony one-to-many

我对此问题有一个扩展:How to deal with Form Collection on Symfony2 Beta? - 我的项目类似,但对象嵌套得更深。我有文章有一个或多个内容元素,每个内容元素包含一个或多个媒体。到目前为止,模型和控制器工作正常,但我不知道如何在我的模板中正确表示嵌套。 Form / ContentType.php看起来很好:

class ContentType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
            ->add('headline')
            ->add('text')
            ->add('medias', 'collection', array(
              'type'      => new MediaType(),
              'allow_add' => true
            ))
        ;
    }

到目前为止,用于创建(或编辑)文章的表单模板看起来像这样(几乎是vanilla自动生成的模板):

...
<form action="{{ path('article_create') }}" method="post" {{ form_enctype(form) }}>
    {{ form_widget(form) }}

    {% for content in form.contents %}
        {{ form_widget(content) }}
    {% endfor %}

    <p>
        <button type="submit">Create</button>
    </p>
</form>
...

如何访问每个内容的媒体,以便它们正确关联?

2 个答案:

答案 0 :(得分:2)

遍历所有内容的媒体:

<form action="{{ path('article_create') }}" method="post" {{ form_enctype(form) }}>
    {{ form_widget(form) }}

    {% for content in form.contents %}
        {% for media in content.medias %}
            {{ form_widget(media) }}
        {% endfor %}
    {% endfor %}

    <p>
        <button type="submit">Create</button>
    </p>
</form>

答案 1 :(得分:-1)

<form action="{{ path('article_create') }}" method="post" {{ form_enctype(form) }}>
    {% for media in form.contents.medias.children %}
         {{ form_widget(media) }}
    {% endfor %}
    {{ form_rest(form) }}
    <p>
        <button type="submit">Create</button>
    </p>
</form>