Symfony: Wie vermeidet man, dass benutzerdefinierte Formulartypen automatisch in ein Div eingepackt werden?

8

UserType-Formular:

%Vor%

TutorType-Formular:

%Vor%

Beim Rendern wird der UserType in einem div gerendert, ich kann keinen Weg finden, dies zu überwinden.

Das Formular wird als

gerendert

%Vor%

Das form_tutor_user ist in ein eigenes Formulargruppen-Div eingeschlossen. Ich habe versucht, das form_tutor_user_widget zu überschreiben, aber das ist eine Ebene zu tief. (Und nur eine schnelle Lösung, sollte es global auf alle Formulartypen angewendet werden - Klassen)

Wie kann ich das Design ändern, sodass alle benutzerdefinierten Typen nicht mit der Standardvorlage "form_row" umschlossen sind?

Oder wie kann ich in Zweigen wissen, wenn ein "Unterformular" gerendert wird? Daher kann ich entscheiden, das <div class="form-group"> zu drucken, wenn der Kindknoten kein Unterformular ist, oder es zu überspringen, falls dies der Fall ist.

TIA

    
Rufinus 25.02.2014, 12:52
quelle

5 Antworten

4

Standardmäßig im Basisformthema:

%Vor%

Und für benutzerdefinierte zusammengesetzte Formulare:

%Vor%

Wenn Sie hier nichts geändert haben, sollte das DIV, das Sie sehen, aus dem einen oder anderen Template stammen.

Wenn jedoch in Ihrem Beispiel form_tutor_user_row definiert ist, wird das erste Bit niemals verwendet. Wenn form_tutor_user_widget definiert ist, wird das letzte Bit nie verwendet.

Zurück zu Ihrer Frage. Ihre Frage ist: "Wie kann ich das Design ändern, sodass alle benutzerdefinierten Typen nicht mit der standardmäßigen Vorlage" form_row "umschlossen werden?"

Hier ist das Problem, so wie ich es sehe: Sie möchten, dass Ihre TOP-Formulare (die Form, in der alle Unterformen enthalten sind) alle eine gemeinsame Art des Renderings in Abschnitten haben. Jeder Abschnitt wird in einem DIV mit class="form-group" enthalten sein. Vielleicht möchten Sie einige zusätzliche Rendering-Operationen einwerfen, aber ich werde mich darauf beschränken, die Dinge einfach zu halten.

Sie müssen dann einen bestimmten Formulartyp erstellen und alle TOP-Formulare von diesem neuen Formulartyp übernehmen. Zum Beispiel:

%Vor%

... und eine vererbte Form:

%Vor%

Wie Sie sehen können, ist es nicht nötig, die PHP-Vererbung für das Vererben von Forming-Vererbung zu machen.

Template-Theming-weise (kann ich das sogar sagen?), wenn für my_form keine spezielle Formgebung festgelegt ist, wird Symfony verstehen, dass das hier zu verwendende Standardformthema das Formthema von ist top_form , die Sie als solche definieren können:

%Vor%

Ich sollte hinzufügen, dass dies ein Problem ist, dem ich bereits begegnet bin und es gelöst habe. Sag mir, wie das für dich funktioniert.

Bearbeiten:

Um es zusammenzufassen, was Sie tun müssen ist:

  • Erstellen Sie den TopType-Formulartyp
  • Fügen Sie den Block top_form_widget in Ihrem Formularthema
  • hinzu
  • Fügen Sie für alle Ihre Stammformulare (dh Formulare der obersten Ebene, Formulare ohne übergeordnete Elemente) eine getParent () -Methode hinzu, die den Namen Ihres TopType-Formulars ("top_form")
Zephyr 03.03.2014, 16:18
quelle
3

Normalerweise löse ich dieses Problem, indem ich die Felder des geschachtelten Formulars manuell rendere:

%Vor%

Wahrscheinlich ist das nicht die eleganteste Lösung, aber es funktioniert für mich und ich habe noch keinen eleganten gesucht.

    
Elnur Abdurrakhimov 28.02.2014 14:46
quelle
2

Wenn Sie theoretisch den form_widget_compound -Block in einem globalen Formular-Theme auf diese Weise überschreiben, sollte es wie gewünscht funktionieren:

%Vor%

Und registriere dein Formular-Thema:

%Vor%     
egeloen 27.02.2014 23:43
quelle
0

Vielleicht ist es keine elegante Lösung, aber funktioniert für mich, weil ich auch versuchte, die Lösung zu finden.

Als ein Beispiel:

%Vor%     
Alice 01.12.2015 04:53
quelle
-1

Versuchen Sie es mit form_themes.

Definieren Sie zunächst in Ihrer übergeordneten Vorlage das Formularthema:

%Vor%

btw ersetzen BundleName, Controllername und somesubform durch die Eigennamen.

rendern Sie es dann mit:

%Vor%     
enterx 03.03.2014 16:23
quelle