将自定义值传递给 Symfony 表单中的每个输入(类型是选择)
Pass custom value to each input in Symfony form (type is choice)
我正在尝试找出解决此问题的最佳方法。我正在查询数据库以获取我用来创建表单字段的值列表。但实际上,它将创建大约 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"
那么将参数传递给每个 child 以便我可以在我的 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
。
{%块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 %}
我正在使用带有 Propel 作为 ORM 的 Symfony 2(.6)。如果我遗漏了相关信息,我很乐意添加信息。
也许 choice_list
是我的答案?但是似乎有一种方法可以将变量添加到我转储 child 时看到的列表中:{% dump(child) %}
.
我相信我已经找到了答案。我构建了一个 ChoiceList
并向其添加了图像和标题。我确信有更好的方法,但它似乎运行良好,而且从图像位于 <label />
的角度来看似乎合乎逻辑,因此将其作为 label
的一部分进行交付是很自然的。
我会在有更多时间的时候尝试更新细节。
我正在尝试找出解决此问题的最佳方法。我正在查询数据库以获取我用来创建表单字段的值列表。但实际上,它将创建大约 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"
那么将参数传递给每个 child 以便我可以在我的 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
。
{%块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 %}
我正在使用带有 Propel 作为 ORM 的 Symfony 2(.6)。如果我遗漏了相关信息,我很乐意添加信息。
也许 choice_list
是我的答案?但是似乎有一种方法可以将变量添加到我转储 child 时看到的列表中:{% dump(child) %}
.
我相信我已经找到了答案。我构建了一个 ChoiceList
并向其添加了图像和标题。我确信有更好的方法,但它似乎运行良好,而且从图像位于 <label />
的角度来看似乎合乎逻辑,因此将其作为 label
的一部分进行交付是很自然的。
我会在有更多时间的时候尝试更新细节。