我正在尝试使用隐藏实体制作具有多对多关系的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表单的情况下工作?
答案 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;