Как работать с несколькими вложенными коллекциями форм в Symfony 2.0? - PullRequest
7 голосов
/ 07 сентября 2011

У меня есть расширение к этому вопросу: Как работать с Form Collection в бета-версии Symfony2? - Мой проект похож, но объекты вложены глубже. У меня есть статьи, которые имеют один или несколько элементов контента, каждый из которых содержит один или несколько медиа. Модель и контроллеры пока работают нормально, но я не знаю, как правильно представить вложение в моем шаблоне. 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 голосов
/ 17 сентября 2011

Перебор всех носителей контента:

<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>
0 голосов
/ 12 августа 2012
<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>
...