Forms 如何在Symfony 2.0中处理多个嵌套表单集合?
我对这个问题进行了扩展:-我的项目类似,但对象嵌套得更深。我有一些文章有一个或多个内容元素,每个元素都包含一个或多个媒体。到目前为止,模型和控制器运行良好,但我不知道如何在模板中正确表示嵌套。 Form/ContentType.php看起来没问题:Forms 如何在Symfony 2.0中处理多个嵌套表单集合?,forms,collections,symfony,one-to-many,Forms,Collections,Symfony,One To Many,我对这个问题进行了扩展:-我的项目类似,但对象嵌套得更深。我有一些文章有一个或多个内容元素,每个元素都包含一个或多个媒体。到目前为止,模型和控制器运行良好,但我不知道如何在模板中正确表示嵌套。 Form/ContentType.php看起来没问题: class ContentType extends AbstractType { public function buildForm(FormBuilder $builder, array $options) { $b
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_widget(form)}
{%用于form.contents%中的内容}
{{form_widget(content)}
{%endfor%}
创造
...
如何访问每个内容的媒体以使它们正确关联?遍历所有内容的媒体:
<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>
{{form_widget(form)}
{%用于form.contents%中的内容}
{content.medias%中的媒体为%s}
{{form_widget(媒体)}
{%endfor%}
{%endfor%}
创造
{form.contents.medias.children%%中的媒体为%
{{form_widget(媒体)}
{%endfor%}
{{form_rest(form)}
创造
谢谢您的回复!事实上,我已经去过了,但我不完全清楚如何使用生成的表单字段原型干净、动态地添加或删除内容元素和媒体。到目前为止,我的解决方案是添加n个空内容元素,每个元素包含m个空媒体元素。这限制了我可以添加的内容和媒体的数量。我宁愿使用内置原型来动态添加内容元素,但我不知道如何动态添加相关媒体。是否要在代码中添加一些注释,以便更清晰易懂?
<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>
<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>