draw/sonata-import-bundle

为 Sonata 定制的通用可配置导入系统

0.10.47 2024-09-25 20:25 UTC

README

此包为 Sonata 添加了从 CSV 导入实体的基本系统。

目前仅支持现有实体的更新。

基于配置,您可以设置哪些实体可以导入。

在上传 CSV 文件时,系统将根据标题列检测属性列表。然后,它将尝试检测标识符和修改器以更新实体。

配置

以下是一个配置示例

draw_sonata_import:
  classes:
    App\Entity\User:
      alias: 'User' #The alias will be used instead of the full class name in the dropdown and database
    App\Entity\Product:
      alias: 'Product'

这告诉系统它支持导入 App\Entity\UserApp\Entity\Product

Sonata 管理员

左侧菜单中将出现一个名为 导入 的新菜单,用于创建新的导入。根据配置,有一个下拉菜单来指定您正在导入的实体。在实体的列表视图中还有一个 导入 操作,该操作将直接链接到此页面,并在下拉菜单中选择实体。

您必须选择一个 CSV 文件,系统将从中检测标题并尝试填写列信息。然后您可以手动调整并选择 处理 文件。

列信息提取

系统尝试根据 Draw\Bundle\SonataImportBundle\Column\ColumnBuilderInterface 提取列信息。系统中有两个提取提供者,一个根据列名(仅限 id)设置列是否为标识符,另一个根据标题检查是否存在 setter 以分配修改器。

导入

在导入数据时,为每个实体/列发送一个事件 Draw\Bundle\SonataImportBundle\Event\AttributeImportEvent。监听此事件可以让您执行数据自定义导入逻辑。如果您处理了事件,则需要停止其传播。如果事件未停止传播,则导入逻辑将回退到设置的列修改器。

setter 只是将列中的原始值(总是字符串)简单设置,因此如果它是另一个对象的引用,您必须实现一个监听器以执行自定义逻辑。