Как добавить классы в метки элементов Symfony 4 «ChoiceType»?

#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. Пожалуйста, посмотрите на это.