it-swarm.com.ru

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

Как я могу установить атрибут HTMLclass в форму <input>, используя FormBuilder в Symfony2?

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

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

 {{ form_widget(form.birthdate) }}

Я хочу, чтобы это поле input с атрибутом class было установлено вcalendar

58
Jean-Philippe Bond

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

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

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

115
Problematic

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

'attr'=> array('class'=>'span2')
110
Acyra

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

27
JeanValjean
{{ form_widget(form.content, { 'attr': {'class': 'tinyMCE', 'data-theme': 'advanced'} })  }}
4
Kiran

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

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'AppBundle\Entity\MyEntity',
        'attr' => array(
            'class' => 'form-horizontal'
        )
    ));
}
4
segli

Как это: 

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

Вы можете сделать это в Twig или FormClass, как показано в примерах выше. Но вы можете решить в контроллере, какой класс должна получить ваша форма. Просто помните, что в контроллере вообще не должно быть много логики!

    $form = $this->createForm(ContactForm::class, null, [
        'attr' => [
            'class' => 'my_contact_form'
        ]
    ]);
0
Kim

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

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

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

См. «Подробнее о переменных формы», чтобы узнать об аргументе переменных.

0
Javier Morillo