Я пытаюсь найти лучший подход к этой проблеме. Я запрашиваю базу данных, чтобы получить список значений, которые я использую для создания поля формы. В действительности, однако, он будет создавать около 12 тегов <input type="checkmark"/>
. Мне нужно предоставить URL-адрес изображения, который также находится в базе данных, каждой галочке (на самом деле связанная с ней метка).
Кажется, что это был бы кусок пирога, если бы я рисовал каждый <input/>
отдельно, просто создавая расширение формы. Я не строю их по отдельности, и не кажется правильным перебирать массив (который Propel предоставил), чтобы создать как можно больше флажков, даже если бы я был.
Тип поля формы model
Propel прост в использовании, но передает данные столбца image
прямо в метку, которая совершенно непрактична. Это делает метку в строке, что-то вроде (взрывающаяся строка также не кажется хорошим вариантом):
Label => "
ID: 2
Title: Label of Checkmark
Parent ID: null
Image: ek9dkB.jpeg"
Итак, какой лучший способ передать параметр каждому ребенку, чтобы я мог получить доступ к нему в моих fields.html.twig
?
Релевантный построитель форм (PictureCheckbox
- это мой настраиваемый тип поля, поэтому он отображает собственный шаблон формы Twig):
$builder->add('skills', new PictureCheckbox(), array(
'choices' => $choices,
'required' => true,
'label' => 'What are your skills?',
'multiple' => true,
'expanded' => true,
));
Я использовал тип модели, а также выше, который очень похож по стилю, но идея такая же.
Здесь field.html.twig
где я создал новый тип формы. {% block picture_checkbox_widget%}
{% if expanded %}
{% for child in form.children %}
{% spaceless %}
<label for="{{ id }}">
{# Most of this would change, but is here for example: #}
{{ form_label(child.label) }}
{% set file = path.from.child %}
<img src="{{ asset('uploads' ~ file) }}" alt="Test Image" />
</label>
{% endspaceless %}
{% endfor %}
<input type="checkbox" id="{{ id }}"{{ block('widget_attributes') }}{% if value is defined %} value="{{ value }}"{% endif %}{% if checked %} checked="checked"{% endif %} />
{% endif %}
{% endblock %}
Я использую Symfony 2 (.6) с Propel как ORM. Я был бы рад добавить информацию, если бы упустил что-то важное.
Может быть, choice_list
- это мой ответ? Но кажется, что есть способ добавить переменную в список, который я вижу, когда я дамп ребенка: {% dump(child) %}
.
Кажется, я нашел ответ. Я построил ChoiceList
и добавил к нему изображение и название. Я уверен, что есть лучший способ, но, похоже, он работает хорошо, и кажется логичным с точки зрения, что изображение находится в <label/>
так что доставка его как части label
естественна.
Я попробую уточнить, когда у меня будет больше времени.