Как установить атрибут class
HTML
в форму <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 применяет атрибут class
HTML как к метке, так и к входу (по крайней мере, из версии 2.1).
Более того, поскольку атрибут attr
является самим массивом, вы можете передать любой атрибут HTML, который вы хотите отобразить для этого поля. Это очень полезно, если вы хотите передать атрибуты data-
HTML5.
{{ 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, позволяют только переопределить ярлык, как показано в примере выше.
См. «Дополнительные сведения о переменных формы», чтобы узнать о аргументе переменных.