具有不同字段的Symfony CollectionType

Pmp*_*mpr 5 php collections symfony-forms symfony

题:

请考虑以下有关如此多要求的订单表格:

Title:       [_________________]

REQUIREMENTS:

What sizes?   [X] Small     [X] Medium    [_] Large
What shapes?  [_] Circle    [X] Square    [_] Triangle
What colors?  [X] Red       [_] Green     [X] Blue
.
.
.
Run Code Online (Sandbox Code Playgroud)

如何在Symfony 3.2中生成和处理表单?

我怎么想:

[命令] ------ OneToMany ------ [要求] ------ OneToMany ------ [选择]

订单类型

class OrderType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $form = $builder
            ->add('title', TextType::class, array());
            ->add('requirements', CollectionType::class,
                array(
                    'entry_type' => RequirementType::class
                )
            )
            ->add('submit', SubmitType::class, array(();

        return $form;
    }
}
Run Code Online (Sandbox Code Playgroud)

问题

我不知道怎么写RequirementType,因为它们不完全相同(大小,形状,颜色 ......).

这就是我的想法:

RequirementType

class RequirementType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $form = $builder
            ->add(??????, EntityType::class,
                array(
                    'label'         => ??????,
                    'expanded'      => true,
                    'multiple'      => true,
                    'class'         => Selection::class,
                    'query_builder' => call_user_func(function (EntityRepository $er, $requirement) {
                        return $er->createQueryBuilder('s')
                                 ->where('s.requirement = :requirement')
                                 ->setParameter('requirement', $requirement)
                    },$em->getRepository($args['class']), $requirement);
                )
            );

        return $form;
    }
}
Run Code Online (Sandbox Code Playgroud)

Aud*_*val 1

如果我正确理解,requirement\xe2\x80\x99s 属性(“Small”、“Medium”、“Large”\xe2\x80\xa6)存储在 Collection\xe2\x80\x99 表中,并且与要求 (\xe2\x80\x9csizes\xe2\x80\x9d, \xe2\x80\x9cshapes\xe2\x80\x9d, \xe2\x80\x9ccolors\xe2\x80\x9d \xe2\x80\xa6) oneToMany 关系(一个要求可以有多个选择)\xe2\x80\xa6。

\n\n

如果是这样,\n以下代码有效:

\n\n

订单类型.php

\n\n
$builder\n    ->add(\'requirements\', CollectionType::class,\n        array(\n            \'entry_type\' => RequirementType::class\n        )\n    );\n
Run Code Online (Sandbox Code Playgroud)\n\n

需求类型.php:

\n\n
$builder\n    ->add(\'name\',  HiddenType::class, array(\'disabled\'=>true))\n    ->add(\'collections\', EntityType::class,  array(\n        \'class\' => \xe2\x80\x98AppBundle:Collection\xe2\x80\x99,  \n        \'choice_label\' => \'name\', \'multiple\' =>true))\n
Run Code Online (Sandbox Code Playgroud)\n\n

在你的 Twig 视图\xc2\xa0 中:

\n\n
{{ form_start(orderForm) }}\n    {% for requirement in orderForm.requirements %}\n        <label>{{ requirement.name.vars.value }}</label>\n        {{ form_widget(requirement.collections) }}\n        {{ form_widget(requirement.name) }}\n        <br>\n    {% endfor %}\n{{ form_end(orderForm) }}\n
Run Code Online (Sandbox Code Playgroud)\n