具有多对多实体的Symfony REST API表单集合

时间:2016-03-28 19:40:51

标签: php forms symfony

我正在尝试使用隐藏实体制作具有多对多关系的Symfony表单。使用this gist,我的表单将普通ID连接到实体对象,并且对于我正在构建的REST API工作得很好。问题是当嵌入实体只是一个ID时,如何创建表单来接收和连接多个实体。

例如,

Employee
    $id - primary key int
    $name
    $companies - many-to-many relationship

Company
    $id - primary key int
    $name
    $employees - inverse many-to-many relationship

现在我想收到包含此内容的POST请求

name = "Employee 1"
companies[] = 1
companies[] = 2

您可以看到公司表单只包含映射到现有公司的整数。正常Symfony collection假设您正在使用新属性(如姓名,电子邮件或电话号码)加入另一个对象,但在这种情况下,ID是唯一要匹配的项目。

如何配置集合表单类型以仅接收ID并且仍可在没有Web表单的情况下工作?

1 个答案:

答案 0 :(得分:1)

  

正常的Symfony集合假设您与新属性(如姓名,电子邮件或电话号码)一起加入另一个对象,但在这种情况下,ID是唯一要匹配的项目。

实际上它没有。 CollectionType字段可与IntegerType配对,因此您可以获得整数集合:

->add('companies', CollectionType::class, [
    'entry_type' => IntegerType::class,
    'allow_add' => true,
])

之后,您可以应用验证来检查传递的是否是整数集合:

/**
 * @Assert\All(
 *     @Assert\Type(type="integer")
 * )
 * @var integer[]
 */
public $companies;