OroPlatform:如何实现 MultiFileType
OroPlatform: how to implement MultiFileType
上下文
我必须在我的 OroPlatform 实体之一上实现多文件上传字段。
我在考虑实现它的步骤与 FileType 完全相同。
所以,我完成了以下步骤:
- 添加文件迁移:
public function up(Schema $schema, QueryBag $queries)
{
$this->attachmentExtension->addFileRelation(
$schema,
'app_sinister',
'files',
[],
15
);
}
- 更改表单类型:
->add('files', MultiFileType::class, ['label' => 'app.sinister.fields.files'])
- 并将其添加到表格中:
form_row(form.files)
它似乎有效,因为属性出现了:
问题
当我试图保存表格时,出现了这个错误:
我想知道是不是因为我在迁移中实施了 addFileRelation
扩展。我尝试使用 addAttachmentAssociation
,它在后台创建了这些选项,但我不知道如何将此属性添加到我的 formType:
在上面的迁移示例中,您已将关系添加到单个文件,但表单类型是针对多个文件的。这会导致错误。
要修复它,您可以使用更复杂的迁移添加与多个文件的关系:
$this->extendExtension->addManyToOneRelation(
$schema,
$schema->getTable('oro_attachment_file_item'),
'app_sinisters',
$schema->getTable('app_sinister'),
'id',
[
ExtendOptionsManager::MODE_OPTION => ConfigModel::MODE_READONLY,
'extend' => [
'is_extend' => true,
'owner' => ExtendScope::OWNER_CUSTOM,
'without_default' => true,
'on_delete' => 'CASCADE',
],
'datagrid' => ['is_visible' => false],
'form' => ['is_enabled' => false],
'view' => ['is_displayable' => false],
'merge' => ['display' => false]
]
);
$this->extendExtension->addManyToOneInverseRelation(
$schema,
$schema->getTable('oro_attachment_file_item'),
'app_sinisters',
$schema->getTable('app_sinister'),
'files',
['id'],
['id'],
['id'],
[
ExtendOptionsManager::MODE_OPTION => ConfigModel::MODE_READONLY,
'extend' => [
'is_extend' => true,
'owner' => ExtendScope::OWNER_CUSTOM,
'without_default' => true,
'cascade' => ['persist'],
'on_delete' => 'CASCADE',
'orphanRemoval' => true,
'fetch' => ClassMetadataInfo::FETCH_LAZY
],
'datagrid' => ['is_visible' => false],
'form' => ['is_enabled' => false],
'view' => ['is_displayable' => false],
'merge' => ['display' => false]
]
);
上下文
我必须在我的 OroPlatform 实体之一上实现多文件上传字段。
我在考虑实现它的步骤与 FileType 完全相同。
所以,我完成了以下步骤:
- 添加文件迁移:
public function up(Schema $schema, QueryBag $queries)
{
$this->attachmentExtension->addFileRelation(
$schema,
'app_sinister',
'files',
[],
15
);
}
- 更改表单类型:
->add('files', MultiFileType::class, ['label' => 'app.sinister.fields.files'])
- 并将其添加到表格中:
form_row(form.files)
它似乎有效,因为属性出现了:
问题
当我试图保存表格时,出现了这个错误:
我想知道是不是因为我在迁移中实施了 addFileRelation
扩展。我尝试使用 addAttachmentAssociation
,它在后台创建了这些选项,但我不知道如何将此属性添加到我的 formType:
在上面的迁移示例中,您已将关系添加到单个文件,但表单类型是针对多个文件的。这会导致错误。
要修复它,您可以使用更复杂的迁移添加与多个文件的关系:
$this->extendExtension->addManyToOneRelation(
$schema,
$schema->getTable('oro_attachment_file_item'),
'app_sinisters',
$schema->getTable('app_sinister'),
'id',
[
ExtendOptionsManager::MODE_OPTION => ConfigModel::MODE_READONLY,
'extend' => [
'is_extend' => true,
'owner' => ExtendScope::OWNER_CUSTOM,
'without_default' => true,
'on_delete' => 'CASCADE',
],
'datagrid' => ['is_visible' => false],
'form' => ['is_enabled' => false],
'view' => ['is_displayable' => false],
'merge' => ['display' => false]
]
);
$this->extendExtension->addManyToOneInverseRelation(
$schema,
$schema->getTable('oro_attachment_file_item'),
'app_sinisters',
$schema->getTable('app_sinister'),
'files',
['id'],
['id'],
['id'],
[
ExtendOptionsManager::MODE_OPTION => ConfigModel::MODE_READONLY,
'extend' => [
'is_extend' => true,
'owner' => ExtendScope::OWNER_CUSTOM,
'without_default' => true,
'cascade' => ['persist'],
'on_delete' => 'CASCADE',
'orphanRemoval' => true,
'fetch' => ClassMetadataInfo::FETCH_LAZY
],
'datagrid' => ['is_visible' => false],
'form' => ['is_enabled' => false],
'view' => ['is_displayable' => false],
'merge' => ['display' => false]
]
);