Использовать изображение вместо текстовой метки в ChoiceType Symfony 5

#php #forms #symfony #twig

Вопрос:

У меня есть форма с типом выбора, в которой отображаются несколько флажков

Я хочу отобразить что-то вроде этого

 <input type="checkbox">
<label><img src="..."></label>
 

но, похоже, я не могу дать только текстовую метку, а не изображение, что я могу сделать?

 $builder->add('whatever',
        ChoiceType::class,
        [
          'choices' =>
            [
              'firstLabel' => 'firstValue',
              'secondLabel' => 'secondeValue',
              'thirdLabel' => 'thirdValue'
            ],
          'expanded' => true,
          'multiple' => true,
        ]
      );
 

Ответ №1:

Вы можете создать пользовательскую form_theme, которая обрабатывает изображение как метку.

Или что-то более простое и конкретное — переопределить ваш шаблон метки для whatever . Смотрите пример из SymfonyCast

Создайте новый шаблон ветки, например, в templates/form/field/whatever_label.html.twig .

Важной частью является то, как вы называете свой блок twig (см. symfony doc).

Вы можете либо переопределить каждое whatever поле, либо только whatever поле для определенного объекта.

Допустим , имя вашей сущности таково Product . Вы должны назвать свой блок {% block _product_whatever_label %} .

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

 {% block _product_whatever_label  %}
   <label>
    <img src="myImage.png"></img>
   </label>
{% endblock %}