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]
    ]
);