制作一个包含两个单独值的表单类型,您可以使用 symfony 4 多次添加

Making a form type with two separate values in it that you can add several times with symfony 4

我是 Symfony 的新手,我想使用 symfony 4 做一些事情。为了简化它,假设我有一个购物篮,我可以在其中添加或删除文章以及 select 的数量我选择的每篇文章。

所以在学说方面我有三个实体:

class Basket {
   protected $id;
   protected $name;
}

class Article{
   protected $id;
   protected $name;
}

class Buying {
   //ManyToOne
   protected $basket;
   //ManyToOne
   protected $article;

   protected $count;
}

我是通过手工制作 HTML 并使用一些讨厌的 JS 代码来完成此表单的,但现在我想使用 Symfony 4 的表单来制作此表单。

我认为最好的方法是为 "Buying" 实体创建我自己的表单类型,它有两个字段,其中一个是 Select 包含每篇文章,另一个是$count 值,然后可以根据需要添加任意数量的 "Buyings",但我想不出一种方法来做到这一点,而且文档似乎没有涵盖这种情况。

为此您需要几种表单类型,并且您可能需要稍微调整一下您的实体。这是它的要点:

首先,您需要为每件购买的商品及其数量配备一个。 EntityType 会给你一个 select,里面有你所有的文章,正是你要找的。

// BuyingType.php
$builder->add('article', EntityType::class, ['class' => Article::class]);
$builder->add('count', NumberType::class, [
    'constraints' => [
        new Count(['min' => 1]),
      ],
]);

第二个 CollectionType 代表整个篮子。

// BasketType.php
$builder->add('basket', CollectionType::class, [
    'entry_type' => BuyingType::class,
    'allow_add' => true,
    'allow_delete' => true,
]);