Gibt es einen Weg, um wrap-Labels rund um den Eingang in symfony2?
Frage über symfony2 form-Komponente und deren templating:
Ich habe eine Reihe von Checkboxen, um Stil (etwa 10 in der einen Zeile). Normalerweise verwende ich <label>
tag so: <label><input/> some text</label>
aber ich kann nicht einen Weg finden, es zu ändern in der Formular-Vorlage (form_div_layout.html-Code.Zweig). Ich kann nicht einmal einen Weg finden, wickeln Sie jeden tag-rund um input-widget und seine Beschriftung, und ich immer am Ende mit markup wie dieses: <input/> <some_tag><label>some text</label></some_tag>
oder <some_tag><input/></some_tag> <label>some text</label>
die nicht sehr nützlich, um das Mindeste zu sagen...
Googelte ein bisschen, aber konnte nicht eine Antwort finden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, das ist, was du suchst:
http://symfony.com/doc/current/book/templating.html#overriding-bundle-templates
Können Sie überschreiben die default-Zweig Vorlagen durch die Schaffung einer anderen Datei mit dem gleichen Namen in deinem app/resources Ordner.
In Ihrem Fall möchten Sie das überschreiben der form_div_layout.html-Code.Zweig, Vorlage, kopieren Sie es aus dem bundle app/Resources/TwigBundle/views/Form/form_div_layout.html-Code.Zweig, anpassen entfernt und symfony verwenden, anstatt der Standard.
EDIT: Sobald Sie überschrieben haben, die Vorlage, die Sie ändern könnte, die
{% block checkbox_widget %}
zu haben, der input zusammen mit der label-tags mit dem Zweig varsMüssen Sie auch entfernen Sie die "generic_label' definition, was bedeutet, jeder andere block erfordert änderungen.
<label>
tag um input. Und ich bezweifle ernsthaft, ob es überhaupt möglich ist, da twig-template für das label sieht so aus:{{ form_label(form.field_name) }}
und gerendert wird als ein element, offensichtlich. Nicht öffnen und schließen-tag. Im Moment bin ich gerade mit diesem Stück jQ:$('input+label').each(function(){$(this).prepend($(this).prev());});
aber es sieht aus wie ein temporärer fix...for
Attribut möglicherweise nicht WCAG-konform: w3schools.com/html5/tag_label.aspWhistlegreg richtig ist, dass Sie brauchen, um das überschreiben der Zweig form Vorlagen. Jedoch, Sie müssen nicht entfernen die
{% block generic_label %}
block. Siehe seine Antwort, wenn Sie Hilfe brauchen, um das überschreiben der Vorlagen.Um zu wickeln Sie das Kontrollkästchen input-tags mit einem label, der erste Schritt wird sein, überschreiben Sie die
{% block choice_widget %}
block und entfernen Sie die{{ form_label(child) }}
Linie von der{% if expanded %}
Abschnitt, der druckt einem separaten Etikett.Nun werden Sie brauchen nur zu behandeln, drucken das drucken des Labels in der
{% block checkbox_widget %}
block.Müssen Sie das gleiche tun für
{% block radio_widget %}
da es sonst nicht haben, ein label jetzt.<div class="control-group"> <label class="control-label">Position type</label> <div class="controls expanded-choice-group"> <label for="profile_edit_position_type_full-time" class="checkbox"> <input type="checkbox" id="profile_edit_position_type_full-time" name="profile_edit[position_type][full-time]" value="full-time" /> Full-time </label> ...snip for brevity... <span class="help-inline"></span> </div> </div>
Ist es möglich, zu definieren, Blöcke für die Zeilen spezifische form von widget-Typen, z.B.
{% block checkbox_row %}
. Ich entdeckte dies hier: http://forum.symfony-project.org/viewtopic.php?f=23&t=57986#p153546Alle, dass ist dann erforderlich, wickeln Sie das Etikett um das widget für die Checkboxen ist folgende:
Den label-code wurde kopiert und eingefügt von
{% block form_label %}
. Ich habe das Formular Fehler unter dem widget wie ich bin mit Zurb Foundation framework.Den code für den radio-buttons ist noch komplizierter, weil
{% block radio_row %}
nicht zu existieren scheinen, so dass Sie Whistlegreg Beratung und Bearbeiten Sie die{% block choice_widget %}
block, in Symfony 2.1, dass heute tatsächlich die{% block choice_widget_expanded %}
. Hier ist mein code:Getestet und arbeiten in Symfony 2.1.9 DEV.
Ich denke, man kann es durch ändern der form_row block.
Probieren Sie etwas wie dieses:
Aber Vorsicht, es ist definitiv nicht eine sehr flexible Lösung für...
Sie sollten wahrscheinlich verwenden Sie diese nur mit einem bestimmten Typ, nicht für alle.
Trotzdem, müssen Sie
form_row
zu arbeiten.