我正试图找出解决这个问题的最佳方法。我正在查询数据库以获取我用于创建表单字段的值列表。但实际上,它会创建大约12个<input type="checkmark" />
标签。我需要提供一个图像URL,它也是从数据库到每个复选标记(实际上是与之关联的标签)。
如果我通过简单地创建Form Extension来单独渲染每个<input />
,这似乎是小菜一碟。我不是单独构建它们,并且通过一个数组(Propel会提供)来构建尽可能多的复选框似乎是不对的,即使我是。
Propel model
表单字段类型易于使用,但会将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,
));
我上面也使用了model type,这在风格上非常相似,但想法是一样的。
这是我创建新表单类型的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) %}
。
答案 0 :(得分:0)
我相信我找到了答案。我构建了一个ChoiceList
并添加了图像和标题。我确信有更好的方法,但它似乎运作良好,从图像处于<label />
的角度来看似乎合乎逻辑,因此将其作为label
的一部分提供自然。
当我有更多时间时,我会尝试更新细节。