kunicmarko / sonata-importer-bundle
简化 Sonata Admin 的导入处理。
Requires
- php: ^7.4
- kunicmarko/importer: ^0.2.0
- sonata-project/admin-bundle: ^3.77
- sonata-project/twig-extensions: ^1.4
- symfony/config: ^4.4 || ^5.1
- symfony/dependency-injection: ^4.4 || ^5.1
- symfony/form: ^4.4 || ^5.1
- symfony/http-foundation: ^4.4 || ^5.1
- symfony/http-kernel: ^4.4 || ^5.1.5
- symfony/options-resolver: ^4.4 || ^5.1
- symfony/validator: ^4.4 || ^5.1
Requires (Dev)
This package is auto-updated.
Last update: 2020-11-16 04:33:41 UTC
README
简化 Sonata Admin 的导入处理。
基于 Importer 构建。
文档
安装
由于 Symfony Flex 会自动检测并注册其自身的包,您首先需要安装 kunicmarko/importer
,将其添加到 bundles.php
,然后对 kunicmarko/sonata-importer-bundle
进行相同的操作。
1. 安装 kunicmarko/importer
首先您需要安装 kunicmarko/importer
,并按照此指南注册包。
2. 使用 composer 添加依赖
composer require kunicmarko/sonata-importer-bundle
3. 在您的 Kernel 中注册包
return [ //... KunicMarko\SonataImporterBundle\SonataImporterBundle::class => ['all' => true], ];
配置
目前,您只能更改包中使用的模板文件,默认配置如下所示
# config/packages/sonata_importer.yaml sonata_importer: templates: form: '@SonataImporter/form.html.twig' action_button: '@SonataImporter/action_button.html.twig' dashboard_action: '@SonataImporter/dashboard_action.html.twig'
如何使用
如果您还没有阅读 Importer 文档,请先阅读。我会假设您已经熟悉 ImportConfiguration,我将仅解释此包中的不同之处。
准备 Admin 类
您的 Admin 类必须实现 KunicMarko\SonataImporterBundle\Admin\AdminWithImport
。
准备控制器
默认情况下,如果您在 Admin 服务定义中未设置控制器,我们将使用 KunicMarko\SonataImporterBundle\Controller\ImportCRUDController
实例替换它。
自定义控制器
如果您正在使用自定义控制器,请确保它实现了 KunicMarko\SonataImporterBundle\Controller\ControllerWithImport
,并且您还需要将 KunicMarko\SonataImporterBundle\Controller\ImportActionTrait
特性添加到您的控制器中。
自动配置 ImportConfiguration
为了能够自动配置您的 ImportConfiguration,它们必须实现 KunicMarko\SonataImporterBundle\SonataImportConfiguration
,并配置 format
和 adminClass
方法以及其他方法。
这看起来会像这样
class CategoryCSVImportConfiguration implements SonataImportConfiguration { /** * @var EntityManagerInterface */ private $entityManager; public function __construct(EntityManagerInterface $entityManager) { $this->entityManager = $entityManager; } public static function adminClass(): string { return CategoryAdmin::class; } public static function format(): string { return 'csv'; } public function map(array $item, array $additionalData) { $category = new Category(); $category->setName($item[0]); $this->entityManager->persist($category); } public function save(array $items, array $additionalData): void { $this->entityManager->flush(); } }