2012-01-08 19 views
5

¿Es posible agregar plantillas globales personalizadas para elementos en campos de formulario de recopilación?Plantillas de colección personalizadas en symfony2

No quiero personalizar la plantilla colección en sí, sino la prestación de cada objeto de la colección, por ejemplo, para agregar una clase o por marcadores específicos para cada objeto contenido en la colección.

Tengo un formulario con un campo de recolección añadió la siguiente manera:

$builder 
    ->add('items', 'collection', array(
     'type' => new ItemType(), 
     'allow_add' => true, 
     'allow_delete' => true, 
     'prototype' => true 
    )); 

quiero definir una plantilla ramita para añadir un botón "eliminar" a cada elemento de la colección (entre otras cosas).

he encontrado que hay una plantilla 'collection_widget' de personalizar colecciones, comprar esto es sólo para la colección en sí, no los elementos individuales.

NOTA 1: Necesito utilizar una plantilla global con el fin de hacer esto para todas las colecciones en todas las formas, sé que puedo resolver esto para cada plantilla de formulario, pero ese no es el punto.

NOTA 2: Hasta ahora he resuelto esto con jQuery, la adición de una clase a collection_widget y añadiendo botones para todos lo que los niños con jQuery. Esto funciona bien por ahora, pero estoy buscando una solución de plantilla al 100%, sin tener que hacer todo el manejo de jquery. Idealmente, esto también debería funcionar con el prototipo de fila para agregar nuevos elementos.

Respuesta

12

fin he encontrado una buena solución para esto. Primero, tuve que crear una plantilla personalizada collection_widget (copiada del form_widget genérico) y adentro, en lugar de llamar al bloque form_rows, llamé al bloque collection_rows, que es una personalización del bloque form_rows. Dentro del bloque collection_rows puedes personalizar lo que quieras, acabo de agregar una clase personalizada para cada niño.

He aquí las dos plantillas:

{% block collection_widget %} 
{% spaceless %} 
    <div {{ block('widget_container_attributes') }}> 
     {{ block('collection_rows') }} 
     {{ form_rest(form) }} 
    </div> 
{% endspaceless %} 
{% endblock collection_widget %} 

{% block collection_rows %} 
{% spaceless %} 
    {{ form_errors(form) }} 
    {% for child in form %} 
     {{ form_row(child, {'attr':{'class':'collection-item'}}) }} 
    {% endfor %} 
{% endspaceless %} 
{% endblock collection_rows %} 
Cuestiones relacionadas