2012-01-08 18 views
5

È possibile aggiungere modelli globali personalizzati per gli elementi nei campi modulo di raccolta?Modelli di raccolta personalizzati in symfony2

Non voglio personalizzare il modello di raccolta stesso, ma il rendering di ogni oggetto nella raccolta, ad esempio per aggiungere una classe specifica o un markup a ciascun oggetto contenuto nella raccolta.

Ho una forma con un campo di raccolta aggiunto in questo modo:

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

voglio definire un modello ramoscello di aggiungere un pulsante "Elimina" per ogni elemento della collezione (tra le altre cose).

Ho trovato che esiste un modello 'collection_widget' per personalizzare le raccolte, acquistare questo solo per la raccolta stessa, non per singoli elementi.

NOTA 1: Ho bisogno di utilizzare un modello globale per fare questo per tutte le collezioni in tutte le forme, so che posso risolvere questo per ogni modello di modulo, ma non è questo il punto.

NOTA 2: Finora ho risolto questo problema con jquery, aggiungendo una classe a collection_widget e aggiungendo pulsanti per tutti i suoi figli con jquery. Per ora funziona bene, ma sto cercando una soluzione template al 100%, senza dover fare tutto il jquery. Idealmente, questo dovrebbe funzionare anche con il prototipo di riga per l'aggiunta di nuovi elementi.

risposta

12

Finalmente ho trovato una buona soluzione a questo. Prima di tutto, ho dovuto creare un modello personalizzato collection_widget (copiato dal generico form_widget) e all'interno, invece di chiamare il blocco form_rows, chiamo il blocco collection_rows, che è una personalizzazione del blocco form_rows. All'interno del blocco collection_rows puoi personalizzare quello che vuoi, ho appena aggiunto una classe personalizzata per ogni bambino.

Ecco i due modelli:

{% 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 %} 
Problemi correlati