#html #css #symfony #class #label
#HTML #css #symfony #класс #метка
Вопрос:
У меня здесь четыре переключателя, и я хочу добавить класс css к каждой метке переключателя. Как я могу это сделать? Я пробовал два способа, но ни один из них не работает:
Попробуйте 1:
->add('background', ChoiceType::class, ['label'=>'2. Dein Hintergrund: ',
//this adds class to the parent div
'attr' => ['class' => 'label'],
'choices' => [
1 => 1,
2 => 2,
3 => 3,
4 => 4
], 'choice_value' => null,
'expanded' => true,
'multiple' => false,
// this adds class to all radios/input elements
'choice_attr' => function($choice, $key, $value){
return ['class' => 'radio radio_'.($key)];
},
//this does NOT work, no error but it will not render a class to the label! Why?
'label_attr' => function($choice, $key, $value){
return ['class' => 'label'.($key)];
},
])
Попробуйте 2:
<div class="container">
{{ form_label(form.background, {'attr': {'class': 'label'}}) }}
{{ form_widget(form.background) }}
<button class="button_main">Übernehmen</button>
</div>
С номером 2 я получаю следующую ошибку:
Во время рендеринга шаблона возникло исключение («Уведомление: преобразование массива в строку»).
Я много раз просматривал эту документацию, но не могу в ней разобраться!
Ответ №1:
Вам нужно создать свою собственную реализацию шаблона:
<div class="col-12">
{{ form_label(form.expandedField) }}
{% for child in form.expandedField.children %}
<div class="group-15">
<div class="custom-control custom-checkbox custom-checkbox-primary">
{{ form_widget(child, {'attr': {'class': 'custom-control-input'}}) }}
<label class="custom-control-label" for="{{ child.vars.id }}" >{{ child.vars.label }}</label>
</div>
</div>
{% endfor %}
</div>
Невозможно добавить свой собственный класс к меткам в FormTypes.
Ответ №2:
Вам нужно создать свой собственный шаблон формы, как в этой документации
Комментарии:
1. Моя попытка 2 взята из этой документации, но я получаю эту ошибку, от которой, похоже, не могу избавиться!
2. пожалуйста, попробуйте это
<div class="container"> {{ form_label(form.background, 'label value', { 'label_attr': {'class': 'label'} }) }} {{ form_widget(form.background) }} <button class="button_main">Übernehmen</button> </div>
, я изменил ‘attr’ на ‘label_attr’3. Справедливый подход, но не то, что мне нужно! Он создает новый элемент label над контейнером и добавляет к нему класс foo!
4. Если вы не используете symfony label, не используйте form_label, просто добавьте свой класс в виджет следующим образом
<div class="container"> {{ form_widget(form.background, {'attr': {'class': 'task_field'}}) }} <button class="button_main">Übernehmen</button> </div>
5. это добавляет класс к контейнерному элементу формы, я пытаюсь получить класс в элементе label!
Ответ №3:
По-видимому, вы не можете изменить атрибуты метки выбора ChoiceType. На данный момент эта функция не существует в ядре Symfony. Пожалуйста, посмотрите на это.