首页 > 解决方案 > 制作一个包含两个单独值的表单类型,您可以使用 symfony 4 添加多次

问题描述

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

所以在教义方面,我有三个实体:

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 的表单来制作这个表单。

我认为最好的方法是为该“购买”实体创建我自己的表单类型,它有两个字段,其中一个是包含每篇文章的 Select,另一个是 $count 值,然后有可能添加尽可能多的“购买”,但我想不出一种方法来做到这一点,并且文档似乎没有涵盖这种情况。

标签: phpsymfonysymfony-forms

解决方案


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

首先,您需要为每个购买的单个项目及其数量提供一个。这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,
]);

推荐阅读