请考虑以下订单表单以及如此多的要求:
Title: [_________________]
REQUIREMENTS:
What sizes? [X] Small [X] Medium [_] Large
What shapes? [_] Circle [X] Square [_] Triangle
What colors? [X] Red [_] Green [X] Blue
.
.
.
如何在 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;
}
}
我不知道怎么写 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;
}
}
答案 0 :(得分:1)
如果我正确理解,需求的属性(“小”,“中”,“大”......)存储在集合表中,并且与需求相关(“大小”,“形状”,“颜色”具有oneToMany关系的“...”(要求可以有多个选择)......
如果是这样, 以下代码有效:
<强> OrderType.php 强>
$builder
->add('requirements', CollectionType::class,
array(
'entry_type' => RequirementType::class
)
);
RequirementType.php:
$builder
->add('name', HiddenType::class, array('disabled'=>true))
->add('collections', EntityType::class, array(
'class' => ‘AppBundle:Collection’,
'choice_label' => 'name', 'multiple' =>true))
在您的Twig视图中
{{ form_start(orderForm) }}
{% for requirement in orderForm.requirements %}
<label>{{ requirement.name.vars.value }}</label>
{{ form_widget(requirement.collections) }}
{{ form_widget(requirement.name) }}
<br>
{% endfor %}
{{ form_end(orderForm) }}