以符号形式添加和删除实体



我有一个教义实体文档,它与实体文件具有双向 oneToMany 关系。因此,一个文档可以有多个文件实体。

现在我想制作一个symfony表单,我可以在其中添加和删除文档中的文件。我通过 CollectionType 设置了一个包含在 DocumentType 中的文件类型:

//DocumentType.php
$builder->add('files', TypeCollectionType::class, ['entry_type' => FileType::class])
//FileType.php
$builder->add('id', TypeHiddenType::class);

这样我就会得到带有文件 ID 的隐藏字段。如果应该从文档中删除文件,我现在想通过 JS 禁用字段。但是我无法发送表单,因为我收到错误:

Could not determine access type for property "id".

这只是因为我想使用字段的 id。当然,我可以使用 src 或文件的任何其他列来识别要删除的正确实体。

但我希望,在symfony中有一个整体上更好的方法来处理这个问题?

这是我的实体映射:

AppBundleEntityFile:
    type: entity
    table: files
    repositoryClass: AppBundleRepositoryFileRepository
    manyToOne:
        document:
            targetEntity: Document
            inversedBy: files
            joinColumn:
                onDelete: CASCADE

AppBundleEntityDocument:
    type: entity
    table: documents
    repositoryClass: AppBundleRepositoryDocumentRepository
    oneToMany:
        files:
            targetEntity: File
            mappedBy: document

这不是Symfony的问题,你的File实体没有任何方法来设置id属性的值。当Symfony的表单数据映射器尝试使用PropertyAccessor将提交的ID映射到您的File实体时会导致错误。

还有一件事,如果要允许集合添加/删除条目,则必须true选项allow_add/allow_delete。你不需要在你的FileType中添加任何标识字段,Symfony表单通过索引来处理它,我猜。

// DocumentType.php
$builder->add('files', TypeCollectionType::class, [
    'entry_type' => FileType::class,
    'allow_add' => true,
    'allow_delete' => true
]);
// FileType.php
// Add fields you want to show up to end-user to edit.
$builder
    ->add('name', TypeTextType::class)
    ->add('description', TypeTextareaType::class)
;

相关内容

  • 没有找到相关文章

最新更新