kunicmarko/sonata-importer-bundle

该软件包已被废弃,不再维护。未建议替代包。

简化 Sonata Admin 的导入处理。

0.1.3 2020-10-18 18:36 UTC

This package is auto-updated.

Last update: 2020-11-16 04:33:41 UTC


README

简化 Sonata Admin 的导入处理。

基于 Importer 构建。

PHP Version Latest Stable Version Latest Unstable Version

Build Status Coverage Status

Import Action

Import Form

文档

安装

由于 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,并配置 formatadminClass 方法以及其他方法。

这看起来会像这样

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();
    }
}