【发布时间】:2016-12-24 18:06:54
【问题描述】:
问题:
考虑遵循订单表单有这么多要求:
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,因为它们并不完全相同(size、shape、颜色,...)。
这是我的想法:
需求类型
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;
}
}
【问题讨论】:
-
在我看来 Requirement 是一个 ChoiceType 允许多个选择。
-
第 1 使 Order 和 Requirement 之间的关系成为 ManyToMany 第 2 在 Requirement 实体中创建 __toString() 方法 第 3 将 EntityType 字段添加到您的 OrderType 并设置选项 expand=>true 和 multiple->true @ 987654321@
-
@FrankB 我不想要一个实体,我需要一个相似实体的集合
标签: php collections symfony symfony-forms