ChoiceType of Forms

69 views Asked by At

I have a Symfony app with this form:

$builder->add('test', ChoiceType::class, [
                 'choices' => ['a' => 1, 'b' => 2],
                 'multiple' => false,
                 'mapped' => false,
                 'expanded' => true,
            ]);

I display it with {{ form_widget(form.test) }} and I get :

<div id="task_test">
    <div class="form-check">
        <input type="radio" id="task_test_0" name="task[test]" required="required" class="form-check-input" value="1">
        <label class="form-check-label required" for="task_test_0">a</label></div>
    <div class="form-check">
        <input type="radio" id="task_test_1" name="task[test]" required="required" class="form-check-input" value="2">
        <label class="form-check-label required" for="task_test_1">b</label>
    </div>
</div>

I want to get this HTML code:

<div id="task_test">
    <div class="form-check d-inline-block custom-control custom-radio mr-1">
        <input type="radio" id="task_test_0" name="task[test]" required="required" class="form-check-input custom-control-input" value="1">
        <label class="form-check-label required custom-control-label" for="task_test_0">a</label></div>
    <div class="form-check d-inline-block custom-control custom-radio">
        <input type="radio" id="task_test_1" name="task[test]" required="required" class="form-check-input custom-control-input" value="2">
        <label class="form-check-label required custom-control-label" for="task_test_1">b</label>
    </div>
</div>
2

There are 2 answers

0
Fatal Error On BEST ANSWER

this will not be the same you want, but at least its close to it

$builder->add('test', ChoiceType::class, [
    'choices' => [
        'a' => 1,
        'b' => 2,
    ],
    'multiple' => false,
    'mapped' => false,
    'expanded' => true,
    'row_attr' => [
        'class' => 'd-inline-block custom-control custom-radio mr-1',
    ],
    'label_attr' => [
        'class' => 'custom-control-label',
    ],
    'choice_attr' => [
        'class' => 'custom-control-input',
    ],
]);

if you want exactly that html output, then you have to edit your vendor template

0
mbyou On

Yes, but like :

$builder->add('test', ChoiceType::class, [
    'choices' => [
        'a' => 1,
        'b' => 2,
    ],
    'multiple' => false,
    'mapped' => false,
    'expanded' => true,
    'attr' => ['class' => 'd-inline-block custom-control custom-radio mr-1'],
    'label_attr' => ['class' => 'custom-control-label'],
    'choice_attr' => function () {
         return ['class' => 'custom-control-input'];
    }, ]);