draw / sonata-import-bundle
为 Sonata 定制的通用可配置导入系统
Requires
- php: >=8.2
- draw/sonata-extra-bundle: ^0.10.47
- sonata-project/admin-bundle: ^4.8
- sonata-project/doctrine-orm-admin-bundle: ^4.2
- symfony/event-dispatcher: ^6.4.0
- symfony/notifier: ^6.4.0
- symfony/validator: ^6.4.0
Requires (Dev)
- draw/tester: ^0.10.47
- knplabs/doctrine-behaviors: *
- phpunit/phpunit: ^11.3
This package is auto-updated.
Last update: 2024-09-25 20:27:12 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\User 和 App\Entity\Product。
Sonata 管理员
左侧菜单中将出现一个名为 导入 的新菜单,用于创建新的导入。根据配置,有一个下拉菜单来指定您正在导入的实体。在实体的列表视图中还有一个 导入 操作,该操作将直接链接到此页面,并在下拉菜单中选择实体。
您必须选择一个 CSV 文件,系统将从中检测标题并尝试填写列信息。然后您可以手动调整并选择 处理 文件。
列信息提取
系统尝试根据 Draw\Bundle\SonataImportBundle\Column\ColumnBuilderInterface 提取列信息。系统中有两个提取提供者,一个根据列名(仅限 id)设置列是否为标识符,另一个根据标题检查是否存在 setter 以分配修改器。
导入
在导入数据时,为每个实体/列发送一个事件 Draw\Bundle\SonataImportBundle\Event\AttributeImportEvent。监听此事件可以让您执行数据自定义导入逻辑。如果您处理了事件,则需要停止其传播。如果事件未停止传播,则导入逻辑将回退到设置的列修改器。
setter 只是将列中的原始值(总是字符串)简单设置,因此如果它是另一个对象的引用,您必须实现一个监听器以执行自定义逻辑。