将自定义值传递给Symfony表单中的每个输入(类型为选项)

时间:2015-02-13 18:22:05

标签: php symfony twig symfony-forms

我正试图找出解决这个问题的最佳方法。我正在查询数据库以获取我用于创建表单字段的值列表。但实际上,它会创建大约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) %}

1 个答案:

答案 0 :(得分:0)

我相信我找到了答案。我构建了一个ChoiceList并添加了图像和标题。我确信有更好的方法,但它似乎运作良好,从图像处于<label />的角度来看似乎合乎逻辑,因此将其作为label的一部分提供自然。

当我有更多时间时,我会尝试更新细节。