制作一个包含两个单独值的表单类型,您可以使用 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,
]);
我是 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,
]);