Как установить атрибут HTML
class
в форму <input>
с помощью FormBuilder
в Symfony2
?
Что-то вроде этого:
->add('birthdate', 'date',array(
'input' => 'datetime',
'widget' => 'single_text',
'attr' => array(
'class' => 'calendar'
)
))
{{ form_widget(form.birthdate) }}
Мне нужно это поле input
с атрибутом class
, установленным в календарь
Вы можете сделать это из шаблона ветки:
{{ form_widget(form.birthdate, { 'attr': {'class': 'calendar'} }) }}
Из http://symfony.com/doc/current/book/forms.html#rendering-each-field-by-hand
Вы можете сделать это с помощью FormBuilder. Добавьте это в массив в FormBuilder:
'attr'=> array('class'=>'span2')
Ответ Acyra приводит правильный путь, если вы хотите установить атрибуты внутри контроллера, но имеет много неточностей.
Да, вы можете сделать это непосредственно с помощью FormBuilder с помощью атрибута attr
(здесь представлен здесь для версии 2.1 и здесь для версии 2.0) в массив параметров следующим образом:
->add('birthdate', 'date',array(
'input' => 'datetime',
'widget' => 'single_text',
'attr' => array('class'=>'calendar')
))
Неверно, что "функциональность сломана". Он работает очень хорошо!
Неверно, что Symfony2 применяет атрибут HTML class
как к метке, так и к входу (по крайней мере, из версии 2.1).
Кроме того, поскольку атрибут attr
является самим массивом, вы можете передать любой атрибут HTML, который вы хотите отобразить для этого поля. Это очень полезно, если вы хотите передать атрибуты HTML5 data-
.
{{ form_widget(form.content, { 'attr': {'class': 'tinyMCE', 'data-theme': 'advanced'} }) }}
Вот так:
{{ form_widget(form.description, { 'attr': {'class': 'form-control', 'rows': '5', 'style': 'resize:none;'} }) }}
Вы можете добавить его в параметры вашего класса формы:
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\MyEntity',
'attr' => array(
'class' => 'form-horizontal'
)
));
}
Отображает HTML-виджет заданного поля. Если вы примените это ко всей форме или коллекции полей, каждая строка базовой строки будет отображаться.
{# render a field row, but display a label with text "foo" #}
{{ form_row(form.name, {'label': 'foo'}) }}
Второй аргумент form_row() - это массив переменных. Шаблоны, представленные в Symfony, позволяют только переопределить ярлык, как показано в приведенном выше примере.
Подробнее о переменных переменных см. "Дополнительные сведения о переменных формы".