关于 bagisto-data-transfer
面向 Bagisto 开发的文件批量导入技能,说明导入器契约、格式无关的数据源,以及针对商品、客户和税率的队列批处理流程。
主要功能
- 01导入商品、客户和税率
- 02导入器契约与注册说明
- 03CSV、XLS、XLSX 和 XML 数据源
- 04队列验证与批次处理
- 05关联与索引阶段
适用场景
- 01为 Bagisto 添加导入器
- 02排查停滞的导入流程
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ bagisto/ agent-skills --skill bagisto-data-transfer安装后在 Claude Code 中输入/bagisto-data-transfer确认已加载。
附带文件importers.mdpipeline.md
详细介绍
数据传输
packages/Webkul/DataTransfer 可从文件向 Bagisto 批量导入记录。
此包提供三个导入器——产品、客户和税率——以及一个队列
流水线,可分批验证、导入、关联和建立索引。
仅支持导入。 此处没有导出器;导出数据由 DataGrid 自带的导出功能处理——请参阅 bagisto-datagrid-development 技能。
参考文件
| 文件 | 何时加载 |
|---|---|
| importers.md | 编写或修改导入器时——契约、验证和批次 |
| pipeline.md | 状态机、队列任务,以及排查卡住的导入 |
注册表
导入器在 Config/importers.php 中注册,并合并到顶层的
importers 键下(而不是 data_transfer.importers):
'tax_rates' => [
'title' => 'data_transfer::app.importers.tax-rates.title',
'importer' => 'Webkul\DataTransfer\Helpers\Importers\TaxRate\Importer',
'sample_paths' => [
'csv' => 'bagisto-data-transfer/samples/csv/tax-rates.csv',
'xls' => 'bagisto-data-transfer/samples/xls/tax-rates.xls',
'xlsx' => 'bagisto-data-transfer/samples/xlsx/tax-rates.xlsx',
'xml' => 'bagisto-data-transfer/samples/xml/tax-rates.xml',
],
],
管理后台的创建/编辑页面会直接遍历 config('importers'),因此新增条目后,
类型下拉菜单中会自动显示,无需修改视图。Import 使用
config('importers.'.$type.'.importer') 解析类——数组键就是导入记录中
存储的 type,因此重命名键会导致现有导入记录失去关联。
请提供全部四种格式的示例文件路径。界面会为每种格式提供示例文件下载; 文件缺失时,链接会失效,而不是优雅地回退。
导入器契约
扩展 Helpers\Importers\AbstractImporter,并准确实现两个方法:
abstract public function validateRow(array $rowData, int $rowNumber): bool;
abstract public function importBatch(ImportBatchContract $importBatchContract): bool;
其他内容都声明为属性——$validColumnNames、
$masterAttributeCode、$permanentAttributes、$messages——或通过钩子重写。
请参阅 importers.md。
数据源
Helpers\Sources\ 提供 CSV、XLS、XLSX 和 XML,它们都扩展
AbstractSource。该类是一个行迭代器,并提供
generateErrorReport(array $errors)。导入器不会自行打开文件——
它会读取 $this->source,因此同一个导入器可处理所有格式。
必须遵守的要求
- 写入任何内容前,必须先验证各行。
validateRow()必须 没有副作用:它会遍历整个文件,并且在stop-on-errors模式下,导入 可能永远不会执行到importBatch()。 - 必须分批处理,绝不能逐行处理整个文件。
AbstractImporter::BATCH_SIZE为 100,流水线会为每个批次派发一个任务。 将整个文件载入内存的导入器违背了设计初衷,也无法处理此功能所针对的文件大小。 - 写入必须通过存储库,与 Bagisto 中的其他写入操作一样。
- 所有消息都必须通过
trans(),使用data_transfer::命名空间,并覆盖全部 23 种语言环境。 - 如实声明
isLinkingRequired()/isIndexingRequired()。 返回 true 会为每个批次增加一个队列阶段;如果需要关联却返回 false,记录就会处于关联不完整的状态,且不会报错。 - 任何超出验证阶段的操作都要求队列正在运行。 使用
QUEUE_CONNECTION=sync时,整个导入会在请求中内联执行,处理实际文件时会超时。
必需的子技能: 在宣布任何更改完成前,使用 bagisto-change-verification。