Bonjour !

J'affiche mes formulaires symfony avec un style (bootstrap) particulier et j'ai trouvé cette partie de la documentation : http://symfony.com/doc/current/form/...tion-prototype qui m'a aidé a faire en sorte à ce que quand j'ai une collection d'éléments que j'appuie sur "ajouter un élément" (méthode jQuery de cette partie de la doc : http://symfony.com/doc/current/form/...llections.html) ca me met pas le paté tout entier mais avec le style qu'il faut.
En code ça donne ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{% block form_row %}
    <div class="row">
        <div class="form-group{% if (not compound or force_error|default(false)) and not valid %} has-error{% endif %}">
            <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">
                {{- form_label(form, "", {'label_attr': {'class': 'pull-right'}}) -}}
            </div>
 
            <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">
                {{- form_widget(form) -}}
            </div>
 
            <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">
                {{- form_errors(form) -}}
            </div>
        </div>
    </div>
 
    <br/>
{% endblock %}
Le problème que j'ai c'est que maintenant chaque fois que j'ai une collection dans une collection, j'ai la première collection qui s'affiche bien mais la deuxième se trouvant dans form_widget me remet la même structure j'ai donc une récursivité dans les form_widget (Oui c'est difficile à expliquer ....).
En gros ça donne ça :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
            <div class="row">
                <div id="familyMembersList" data-prototype="{{ form_widget(form.childsFamily.vars.prototype)|e('html_attr') }}">
                </div>
            </div>
Cette partie du HTML va apeller ce formulaire la :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('childsFamily', CollectionType::class, array(
            'entry_type' => RelationshipType::class,
            'allow_add' => true
        ));
    }
 
    public function getBlockPrefix()
    {
        return 'AddChildStep3';
Qui à son tour va apeller :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('relRole', EntityType::class, array(
                'class' => 'VSCrmBundle:RelRole'
            ))
            //->add('sourceId', PersonChildType::class)
            ->add('destinationId', PersonRelationshipType::class);
    }
Qui a son tour va appeler 2 collections :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('firstName')
            ->add('lastName')
            ->add('bornOn', BirthdayType::class, array(
                'required' => false
            ))
            ->add('familySituation', ChoiceType::class, array(
                'choices' => array(
                    'Single' => 'SINGLE',
                    'Married' => 'MARRIED',
                    'Other' => 'OTHER'
                )
            ))
            ->add('profession')
            ->add('addresses', CollectionType::class, array(
                'entry_type' => AddressType::class,
                'allow_add' => true,
                'allow_delete' => true
            ))
            ->add('medias', CollectionType::class, array(
                'entry_type' => MediaType::class,
                'allow_add' => true,
                'allow_delete' => true
            ));
et en images ça donne ça :
Nom : problem_stack.PNG
Affichages : 544
Taille : 24,5 Ko

j'ai trouvé le nom du block en question a customiser dans
profiler->forms->my form->vars->unique_block_prefix = _AddChildStep3_childsFamily
et j'ai essayé de faire ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
{% block _AddChildStep3_childsFamily_entry_row %}
    <div class="row">
        <div class="form-group{% if (not compound or force_error|default(false)) and not valid %} has-error{% endif %}">
            <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">
                {{- form_label(form.relRole, "", {'label_attr': {'class': 'pull-right'}}) -}}
            </div>
 
            <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">
                {{- form_widget(form.relRole) -}}
            </div>
 
            <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">
                {{- form_errors(form.relRole) -}}
            </div>
        </div>
 
        <br/>
 
        <div class="form-group{% if (not compound or force_error|default(false)) and not valid %} has-error{% endif %}">
            <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">
                {{- form_label(form.destinationId.firstName, "", {'label_attr': {'class': 'pull-right'}}) -}}
            </div>
 
            <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">
                {{- form_widget(form.destinationId.firstName) -}}
            </div>
 
            <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">
                {{- form_errors(form.destinationId.firstName) -}}
            </div>
        </div>
 
        <br/>
 
        <div class="form-group{% if (not compound or force_error|default(false)) and not valid %} has-error{% endif %}">
            <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">
                {{- form_label(form.destinationId.lastName, "", {'label_attr': {'class': 'pull-right'}}) -}}
            </div>
 
            <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">
                {{- form_widget(form.destinationId.lastName) -}}
            </div>
 
            <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">
                {{- form_errors(form.destinationId.lastName) -}}
            </div>
        </div>
 
        <br/>
 
        <div class="form-group{% if (not compound or force_error|default(false)) and not valid %} has-error{% endif %}">
            <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">
                {{- form_label(form.destinationId.bornOn, "", {'label_attr': {'class': 'pull-right'}}) -}}
            </div>
 
            <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">
                {{- form_widget(form.destinationId.bornOn) -}}
            </div>
 
            <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">
                {{- form_errors(form.destinationId.bornOn) -}}
            </div>
        </div>
 
        <br/>
 
        <div class="form-group{% if (not compound or force_error|default(false)) and not valid %} has-error{% endif %}">
            <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">
                {{- form_label(form.destinationId.profession, "", {'label_attr': {'class': 'pull-right'}}) -}}
            </div>
 
            <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">
                {{- form_widget(form.destinationId.profession) -}}
            </div>
 
            <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">
                {{- form_errors(form.destinationId.profession) -}}
            </div>
        </div>
 
        <br/>
    </div>
{% endblock %}
en ajoutant ceci en en-tête a mon template :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
{% form_theme form 'VSCrmBundle:CustomForms:custom_form_row.html.twig' %}
 
{% form_theme form 'VSCrmBundle:CustomForms:custom_responsible_collection.html.twig' %}
(j'ai aussi proposé la technique proposée dans la documentation avec form with ['form1.html.twig', 'form2.html.twig'])

Mais cela ne marche pas.... Pouvez-vous m'aider ?

Merci !

PS : petite précision : lorsque je regarde dans le profiler/twig je ne vois même pas l'utilisation du block que j'ai redefini qui s'intitule :
{% block _AddChildStep3_childsFamily_entry_row %}... Pourtant si je comprends bien c'est ça que je dois mettre comme titre du block customisé ?!