Как установить атрибут класса для ввода формы Symfony2

53

Как установить атрибут HTML class в форму <input> с помощью FormBuilder в Symfony2?

Что-то вроде этого:

->add('birthdate', 'date',array(
      'input' => 'datetime',
      'widget' => 'single_text',
      'attr' => array(
          'class' => 'calendar'
      )
 ))

 {{ form_widget(form.birthdate) }}

Мне нужно это поле input с атрибутом class, установленным в календарь

Теги:
forms
input
formbuilder

7 ответов

99
Лучший ответ

Вы можете сделать это из шаблона ветки:

{{ form_widget(form.birthdate, { 'attr': {'class': 'calendar'} }) }}

Из http://symfony.com/doc/current/book/forms.html#rendering-each-field-by-hand

  • 43
    Это действительно не ответ на вопрос - весь смысл FormBuilder состоит в том, чтобы избежать ручного кодирования шаблона Twig.
  • 21
    @Acyra Это зависит ... бросать кучу связанных с просмотром вещей в конструктор форм тоже не лучший способ.
Показать ещё 5 комментариев
111

Вы можете сделать это с помощью FormBuilder. Добавьте это в массив в FormBuilder:

'attr'=> array('class'=>'span2')
  • 9
    Это добавляет класс в упаковочный div, а не вход
28

Ответ 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-.

  • 1
    Sf2.1 исправляет ошибку, о которой я говорил; Я обновил свой ответ.
  • 1
    @ Асира, я вижу ...
4
{{ form_widget(form.content, { 'attr': {'class': 'tinyMCE', 'data-theme': 'advanced'} })  }}
3

Вот так:

{{ form_widget(form.description, { 'attr': {'class': 'form-control', 'rows': '5', 'style': 'resize:none;'} }) }}
1

Вы можете добавить его в параметры вашего класса формы:

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'AppBundle\Entity\MyEntity',
        'attr' => array(
            'class' => 'form-horizontal'
        )
    ));
}
  • 0
    Это должен быть правильный ответ, лучше всего делать это в классе, а не в ветке.
0

Отображает HTML-виджет заданного поля. Если вы примените это ко всей форме или коллекции полей, каждая строка базовой строки будет отображаться.

{# render a field row, but display a label with text "foo" #} {{ form_row(form.name, {'label': 'foo'}) }}

Второй аргумент form_row() - это массив переменных. Шаблоны, представленные в Symfony, позволяют только переопределить ярлык, как показано в приведенном выше примере.

Подробнее о переменных переменных см. "Дополнительные сведения о переменных формы".

Ещё вопросы

Сообщество Overcoder
Наверх
Меню