4 votes

Symfony2: Appliquer un thème à un champ individuel pour le type collection

Il suffit d'appliquer un thème au champ de formulaire, par exemple :

{% form_theme form _self %}

{% block _product_name_widget %}
    {{ block('field_widget') }}
{% endblock %}

mais que se passe-t-il si le champ de formulaire est de type collection ? Par exemple : product['models'][1][comment, Je n'ai aucune idée comment le personnaliser. (Cela peut être la première question de ce genre ici)

MISE À JOUR : réponse ici : Symfony2: collection form field type with data-prototype

5voto

TroodoN-Mike Points 1713

À partir de Symfony 2.1 (cela peut également fonctionner pour la version 2.0 mais je ne suis pas sûr), pour appliquer un thème à une collection, vous devez procéder de la manière suivante :

Supposons que nous ayons une collection de produits (nous avons plusieurs entités Produit)

Contrôleur :

    $repository = $this->getDoctrine()->getRepository('ExampleBundle:Product');
    $products = $repository->findAll();

    $productCollection = new Products;

    foreach ($products as $product) {
        $productCollection->getProducts()->add($product);
    }

    $collection = $this->createForm(new ProductsType, $productCollection);

    return $this->render('ExampleBundle:Default:index.html.twig', array(
        'collection' => $collection->createView()
            ));        

Votre thème peut ressembler à ceci :

{% block _productsType_products_entry_name_row %}
    {{ block('form_widget') }}
{% endblock %}
{% block _productsType_products_entry_description_row %}
    {{ block('form_widget') }}
{% endblock %}

Le truc est avec "entry" où Twig fera le travail pour vous d'appliquer les changements ci-dessus à chaque ligne et pour chaque champ que vous spécifiez

J'espère que cela vous aidera !

1voto

Anil Gupta Points 470

Vous pouvez faire avec le bloc collection_widget remplacement :

{% block collection_widget %}
{% spaceless %}
    {% if prototype is defined %}
        {% set attr = attr|merge({'data-prototype': form_row(prototype) }) %}
    {% endif %}
    {{ block('form_widget') }}
{% endspaceless %}
{% endblock collection_widget %}

Si vous souhaitez personnaliser le type de collection de formulaire, essayez de regarder ce Bundle de Produits

0voto

Ryan Points 604

Vous pouvez remplacer le thème du widget collection_widget pour un seul champ en référençant le widget de cette manière également.

Par exemple, si "categories" est un widget de "collection" sur un formulaire de ProductType, vous pouvez faire ceci.

{% block _product_categories_widget %}
    {% for child in form %}
        {{- form_row(child) -}}

    {% endfor %}
{% endblock %}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X