【问题标题】:Symfony CollectionType with different fields具有不同字段的 Symfony CollectionType
【发布时间】: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,因为它们并不完全相同(sizeshape、颜色,...)。

这是我的想法:

需求类型

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


【解决方案1】:

如果我理解正确,需求的属性(“Small”、“Medium”、“Large”……)存储在 Collection' 表中,并且与需求相关(“sizes”、“shapes”、“colors” ” ...) 具有 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) }}

【讨论】:

  • 抱歉,回复延迟太久。它如何列出所有Requirements?
猜你喜欢
  • 1970-01-01
  • 2017-01-15
  • 2016-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多