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

7
我有一个与此问题相关的扩展:如何处理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
            ))
        ;
    }

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

...
<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个回答

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>

谢谢您的回复!实际上,我已经去过那里了,但我并不完全清楚如何使用生成的表单字段原型干净、动态地添加或删除内容元素和媒体。到目前为止,我的解决方案是添加n个空内容元素,每个元素包含m个空媒体元素。这限制了我可以添加的内容和媒体数量。我宁愿使用内置的原型来动态添加内容元素,但我不知道如何动态添加相关的媒体。 - Fester Bestertester

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

您是否考虑为您的代码添加一些注释,以使其更清晰易懂? - Yaroslav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接