1

我真的需要你的帮助来创建一个表格。我有,和属性的实体。是多对多关系。然后我有另外两个实体groupitem。两者都有和属性。groupentity与item有关系。像这样的东西:$id$name$items$items$id$name

组 1 实体 1
 |- 项目 1 |- 项目 1
 '- 第 2 项 |- 第 2 项
                         '- 第 3 项

第 2 组实体 2
 |- 第 3 项 |- 第 2 项
 '- 第 4 项 |- 第 3 项
                         '- 第 4 项

为具有分组项目的实体创建表单的最佳方法是什么?像这样:

-------------------------------------------------- --
第 1 组
 ☑ 项目 1 ☑ 项目 2
-------------------------------------------------- --
第 2 组
 ☑ 项目 3 ☑ 项目 4

试图谷歌,但老实说,我不知道从哪里开始:/

4

2 回答 2

4

好的...所以我发现,那group_by是用来获取optgroup<select>。我的EntityType有:

$builder->add('item', 'entity' array(
    'class' => 'MyBundle:Item',
    'property' => 'name',
    'multiple' => true,
    'expanded' => true,
    'group_by' => 'group.name',
);

在我的模板中:

{% form_theme form 'MyBundle::form_theme.html.twig' %}
{{ form_widget(form.item) }}
{{ form_rest(form) }}

在我的表单主题中,我只是尝试复制choice_widget_collapsed,但存在一些差异(例如:检查是否检查了值)。我不知道这是否是最好的方法,但它对我有用。也许是因为我只使用item实体选择而没有其他输入字段。我的表单主题:

{% block choice_widget_expanded %}
{% spaceless %}
    <div {{ block('widget_container_attributes') }}>
        {% set options = choices %}
        {{ block('choice_widget_expanded_options') }}
    </div>
{% endspaceless %}
{% endblock choice_widget_expanded %}

{% block choice_widget_expanded_options %}
{% spaceless %}
    {% for group_label, choice in options %}
        {% if choice is iterable %}
            <fieldset>
                <legend>{{ group_label|trans({}, translation_domain) }}</legend>
                {% set options = choice %}
                {{ block('choice_widget_expanded_options') }}
            </fieldset>
        {% else %}
            <input type="checkbox" name="{{ full_name }}[]" value="{{ choice.value }}"{% if value[choice.value] %} checked="checked"{% endif %}/> {{ choice.label|trans({}, translation_domain) }}
        {% endif %}
    {% endfor %}
{% endspaceless %}
{% endblock choice_widget_expanded_options %}

欢迎任何改进。

于 2013-05-21T12:35:12.633 回答
0

在您的EntityType.php文件中(这可以根据您的实体自动生成),您需要一个如下所示的实体字段类型

$builder->add('item', 'entity' array(
    'class' => 'YourNameSpace:Item',
    'property' => 'name',
    'multiple' => true,
    'expanded' => true,
    'query_builder' => function(\Doctrine\ORM\EntityRepository $er) {
        return $er->createQueryBuilder('i')
            ->where('i.group = 1');
    }
);

显然,您必须根据您的特定模式和变量名称进行一些调整。这也需要组和项目之间的双向关联。这也只为第 1 组添加了选择器。您必须为第二组添加另一个类似的东西。

于 2013-05-06T15:19:25.107 回答