Symfony Zweig, wie Sie auf Klasse hinzufügen, um eine Zeile der form
Baue ich ein Projekt in Symfony 2.3 Zweig. Ich möchte eine Klasse hinzufügen, um die form Reihe block. Ich bin mit einem Formular-theme-Datei, die enthält:
{% block form_row %}
<div class="form-row">
{{ form_label(form) }}
{{ form_widget(form) }}
{{ form_errors(form) }}
</div>
{% endblock %}
Nun einige meiner form Zeilen möchte ich hinzufügen, dass eine extra-Klasse form-row-split
. Ich kann nicht herausfinden, wie man dies richtig tun. Die Art und Weise, ich habe es fast-arbeiten ist:
{% block form_row %}
{% set attr = attr|merge({'class': 'form-row' ~ (attr.class is defined ? ' ' ~ attr.class : '') ~ (errors|length > 0 ? ' error' : '')} ) %}
<div {{ block('widget_container_attributes') }}>
{{ form_label(form) }}
{{ form_widget(form) }}
{{ form_errors(form) }}
</div>
{% endblock %}
(Beachten Sie, ich habe die error
Klasse Logik, in der es auch bleiben müssen).
Dann in der Formular-generator:
$builder
->add('first_name', 'text', array(
'attr' => array(
'class' => 'form-row-split'
)
));
Diese fast funktioniert, aber es fügt dieser Klasse überall und fügt auch die widget-id auf die Reihe!!!
<div id="myform_first_name" class="form-row form-row-split">
<label for="myform_first_name">First name</label>
<input id="myform_first_name" class="form-row-split" type="text" name="myform[first_name]">
</div>
Ich denken kann ein paar mögliche Lösungen, aber keiner von Ihnen sind ziemlich oder gerade nach vorne. Sicherlich muss es eine einfache Möglichkeit, dies zu tun?
div.form-row-split
oder label.form-row-split
oder input.form-row-split
anstelle einer einfachen form-row-split
in der css-Datei, statt der Suche nach einem hack in der form generation?InformationsquelleAutor lopsided | 2014-04-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es eine ziemlich einfache Lösung für dieses problem tatsächlich. Ich brauchte nur ein Formular Typ Erweiterung erweitern Sie die Basis-form-Typ erlauben eine zusätzliche option verfügbar: http://symfony.com/doc/2.3/cookbook/form/create_form_type_extension.html
Folgenden durch das Beispiel in den docs, ich habe eine neue form Typ Erweiterung:
Dann registrierte ich den service in meinem bundle...
Da jedes widget erweitert das Basis-Formular geben Sie dies dann erlaubt mir, Euch das neue
row_attr
option durch auf ein beliebiges Feld, z.B.:Dann den Zweig überschreibt, um den neuen
row_attr
option:Fertig!
(Der Vollständigkeit halber, meine volle Zweig überschreiben, noch führt in der
form-row
underror
Klassen in etwa so:.. aber das ist nicht wirklich notwendig für die Beantwortung meiner eigenen Frage 😛 )
Up-to-date-link für das Formular geben Sie extension doc
Wissen Sie, wie Sie machen diese Arbeit leicht mit RepeatedType Formen ?
InformationsquelleAutor lopsided
Docs sagen: Sie immer in der Lage, um pass-attr zu gerenderte element:
attr
zu der form, label, widget, Fehler, NICHT die Zeile. In der Tat, wenn man sich die original-theme-Datei (form_div_layout.html.twig
) können Sie sehen, dass in derform_row
block, die umliegenden<div>
nie injizieren alle übergebenen vars... daher meine Frage, wie dies zu tun. Vielen Dank für Ihren Vorschlag aber.du hast Recht, dann gibt es nur eine option, zu überschreiben form_row, um Ihren Bedarf in Ihrer Vorlage.
Ja, ich habe die
form_row
überschreiben, aber ich brauche die Hälfte der Zeilen zu verwenden, eine version und die andere Hälfte zu verwenden, die andere version mit dem extraform-row-split
Klasse. Außer Sie verwenden alle die gleichenform_row
zum blocken außer Kraft setzen - also muss ich weitergeben kann, etwas in diese überschreibung block irgendwie...InformationsquelleAutor pomaxa
Unten ist eine Kopie der Antwort von @schief, aber mit änderungen widerspiegeln neuesten Symfony-Struktur ändert sich (v. 2.7+):
Gibt es eine ziemlich einfache Lösung für dieses problem tatsächlich. Ich brauchte nur ein Formular Typ Erweiterung erweitern Sie die Basis-form-Typ erlauben eine zusätzliche option verfügbar: http://symfony.com/doc/master/form/create_form_type_extension.html
Folgenden durch das Beispiel in den docs, ich habe eine neue form Typ Erweiterung:
Dann registrierte ich den service in meinem bundle...
Da jedes widget erweitert das Basis-Formular geben Sie dies dann erlaubt mir, Euch das neue
row_attr
option durch auf ein beliebiges Feld, z.B.:Dann den Zweig überschreibt, um den neuen
row_attr
option:Fertig!
(Der Vollständigkeit halber, meine volle Zweig überschreiben, noch führt in der
form-row
underror
Klassen in etwa so:.. aber das ist nicht wirklich notwendig für die Beantwortung meiner eigenen Frage 😛 )
InformationsquelleAutor Pavel Dubinin
Was ich Tat, war einfacher (wenn auch vielleicht ein bisschen weniger sauber?).
Übergeben Sie die Klasse für das Formular Zeile über ein Feld "data" Attribut :
Dann Griff er in die form-theme-Vorlage auf diese Weise :
Gibt :
InformationsquelleAutor Philippe-B-