Wie kann ich das HTML
class
-Attribut mithilfe der FormBuilder
in <input>
auf ein Formular Symfony2
setzen?
Etwas wie das:
->add('birthdate', 'date',array(
'input' => 'datetime',
'widget' => 'single_text',
'attr' => array(
'class' => 'calendar'
)
))
{{ form_widget(form.birthdate) }}
Ich möchte dieses input
field mit dem Attribut class
aufcalendar
Sie können dies von der Zweigvorlage aus tun:
{{ form_widget(form.birthdate, { 'attr': {'class': 'calendar'} }) }}
Von http://symfony.com/doc/current/book/forms.html#rendering-each-field-by-hand
Sie können dies mit FormBuilder tun. Fügen Sie dies dem Array in Ihrem FormBuilder hinzu:
'attr'=> array('class'=>'span2')
Die Antwort von Acyra ist der richtige Weg, wenn Sie Attribute innerhalb des Controllers einstellen möchten, aber viele Ungenauigkeiten aufweisen.
Ja, Sie können dies direkt mit dem FormBuilder tun, indem Sie das attr
-Attribut (eingeführt hier für die 2.1-Version und hier für die 2.0 ) für das Array der Optionen wie folgt verwenden:
->add('birthdate', 'date',array(
'input' => 'datetime',
'widget' => 'single_text',
'attr' => array('class'=>'calendar')
))
Es stimmt nicht, dass die "Funktionalität nicht funktioniert". Es funktioniert sehr gut!
Es trifft nicht zu, dass Symfony2 das HTML-Attribut class
sowohl auf das Label als auch auf die Eingabe anwendet (zumindest ab Version 2.1).
Da das attr
-Attribut selbst ein Array ist, können Sie jedes beliebige HTML-Attribut übergeben, das Sie für das Feld darstellen möchten. Dies ist sehr hilfreich, wenn Sie die HTML5-data-
-Attribute übergeben möchten.
{{ form_widget(form.content, { 'attr': {'class': 'tinyMCE', 'data-theme': 'advanced'} }) }}
Sie können es in den Optionen Ihrer Formularklasse hinzufügen:
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\MyEntity',
'attr' => array(
'class' => 'form-horizontal'
)
));
}
So was:
{{ form_widget(form.description, { 'attr': {'class': 'form-control', 'rows': '5', 'style': 'resize:none;'} }) }}
Sie können dies in Twig oder FormClass wie in den obigen Beispielen gezeigt. Möglicherweise möchten Sie jedoch im Controller entscheiden, welche Klasse Ihr Formular erhalten soll. Denken Sie daran, im Allgemeinen nicht viel Logik in der Steuerung zu haben!
$form = $this->createForm(ContactForm::class, null, [
'attr' => [
'class' => 'my_contact_form'
]
]);
Rendert das HTML-Widget eines bestimmten Felds. Wenn Sie dies auf ein gesamtes Formular oder eine Sammlung von Feldern anwenden, wird jede darunterliegende Formularzeile gerendert.
{# render a field row, but display a label with text "foo" #}
{{ form_row(form.name, {'label': 'foo'}) }}
Das zweite Argument für form_row () ist ein Array von Variablen. Die in Symfony bereitgestellten Vorlagen ermöglichen nur das Überschreiben des Labels, wie im obigen Beispiel gezeigt.
Unter "Weitere Informationen zu Formularvariablen" erfahren Sie mehr über das Variablenargument.