2011-09-07 20 views
7

Tengo una extensión a esta pregunta: How to deal with Form Collection on Symfony2 Beta? - Mi proyecto es similar, pero los objetos están anidados más profundamente. Tengo artículos que tienen uno o más elementos de contenido, cada uno de los cuales contiene uno o más medios. El Modelo y los Controladores funcionan bien hasta ahora, pero no sé cómo representar correctamente el anidamiento en mi plantilla. Formulario/ContentType.php se ve bien:¿Cómo manejar múltiples colecciones de formularios anidados en Symfony 2.0?

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 
      )) 
     ; 
    } 

Y hasta el momento, la plantilla de formulario para la creación (o editar) un artículo es el siguiente (plantilla generada automáticamente casi vainilla):

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

¿Cómo accedo a cada medio de contenido para que se asocien correctamente?

Respuesta

2

iterar a través de los medios de comunicación de todo el contenido de:

<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

Gracias por su respuesta! En realidad, ya he estado allí, pero no estoy del todo claro sobre cómo puedo agregar o quitar de forma limpia y dinámica elementos de contenido y medios usando los prototipos de campo de formulario generados. Mi solución hasta el momento es agregar n elementos de contenido vacíos, cada uno con m elementos de medios vacíos. Esto limita la cantidad de contenidos y medios que puedo agregar. Prefiero usar el prototipo integrado para agregar elementos de contenido dinámicamente, pero no sé cómo agregar dinámicamente los medios asociados en ese momento. –

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

¿Desea agregar algunos comentarios a su código por lo que es más claro y comprensible? – Yaroslav

Cuestiones relacionadas