Как добавить пользовательский класс для выбора тега в Symfony2 FormType

0

Мне нужно добавить собственный класс в тег select (<select>), сгенерированный FormType с symfony2. Все параметры создаются Symfony

$builder->add(
    'birthday',
    null,
    array(
        'label' => 'form.birthday'
       , 'translation_domain' => 'FOSUserBundle'
    )
)

и код генерации:

<div id="fos_user_registration_form_birthday" placeholder="Mot de passe" class="form-control">
  <select id="fos_user_registration_form_birthday_day" name="fos_user_registration_form[birthday][day]">
    <option value="1">1</option>
    ...
  </select>
  <select id="fos_user_registration_form_birthday_month" name="fos_user_registration_form[birthday][month]">
    <option value="1">jan</option>
    ...
  </select>
  <select id="fos_user_registration_form_birthday_year"    name="fos_user_registration_form[birthday][year]">
    <option value="1994">1994</option>
    ...
  </select>
</div>

И мне нужно добавить к этому пользовательский класс:

<select id="fos_user_registration_form_birthday_day" name="fos_user_registration_form[birthday][day]">

Я пробовал это решение в своем html-контенте:

{{ form_widget(form.birthday, {'attr': {'placeholder': 'form.password'|trans, 'class': 'test'}}) }}

Но test класс добавляется в мой div (<div id="fos_user_registration_form_birthday" placeholder="Mot de passe" class="form-control"></div>), а не мой тег select.

Какие-либо предложения?

Теги:
forms
twig

1 ответ

1

В вашем классе Form вы можете установить класс, используя параметр attr. Вы уже можете сделать это внутри своего типа формы или позже в своем шаблоне, как вы это делали.

Он PROBABLY не использует ваш "тестовый" класс, потому что виджет дня рождения не использует его. Пожалуйста, найдите весь проект для "birthday_widget" и посмотрите, использует ли он жесткий диск с классом контроля формы. Если это так, вы можете написать оператор if, проверяющий, является ли attr.class определенным или добавляет что-то вроде этого:

{% for attrname, attrvalue in attr %} {{ attrname }}="{{ attrvalue }}"{% endfor %}

Изменение: можете ли вы также выполнять рендеринг каждый день, месяц и год отдельно (я не уверен, что это сработает, потому что я не знаю тип дня рождения), вот так...

form_widget(form.birthday.day, {'attr': {'class': 'test'}})

Еще одна вещь, которую вы можете попробовать - изменить свой тип формы.

Попытайтесь добавить это после добавления метода:

$builder->get('birthday')->get('day')->setAttribute('class', 'test'); // Also try with ->get('days')

Я почти уверен, что что-то выше будет работать.

Ещё вопросы

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