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)
如果我正确理解,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 );\nRun 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))\nRun 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) }}\nRun Code Online (Sandbox Code Playgroud)\n