bedita/import-tools

bedita 数据导入工具

安装数: 2,771

依赖项: 0

建议者: 0

安全: 0

星标: 2

关注者: 5

分支: 1

开放性问题: 0

类型:cakephp-plugin

v1.5.0 2024-09-05 10:27 UTC

This package is auto-updated.

Last update: 2024-09-05 10:27:36 UTC


README

Github Actions codecov phpstan Scrutinizer Code Quality image image

安装

首先,如果尚未创建 vendor 目录,您必须使用以下命令安装 composer 依赖项:

composer install

您可以使用 composer 将此插件安装到您的 CakePHP 应用程序中。

安装 composer 包的推荐方法是

composer require bedita/import-tools

命令

AnonymizeUsersCommand

此命令提供了一个匿名化用户的工具。用法示例

// anonymize all users (except user by ID 1, admin)
$ bin/cake anonymize_users

// anonymize users by id 2,3,4
$ bin/cake anonymize_users --id 2,3,4

// anonymize all users except users by id 1,2,3
$ bin/cake anonymize_users --preserve 1,2,3

ImportCommand

此命令提供了一个从 csv 文件导入数据的工具。

用法示例

# basic
$ bin/cake import --file documents.csv --type documents
$ bin/cake import -f documents.csv -t documents

# dry-run
$ bin/cake import --file articles.csv --type articles --dryrun yes
$ bin/cake import -f articles.csv -t articles -d yes

# destination folder
$ bin/cake import --file news.csv --type news --parent my-folder-uname
$ bin/cake import -f news.csv -t news -p my-folder-uname

# translations
$ bin/cake import --file translations.csv --type translations
$ bin/cake import -f translations.csv -t translations

ImportProjectCommand

当您需要将远程数据库复制到本地数据库,并且之后想要“调整”应用程序和用户时,可以使用此命令。默认数据源中的应用程序和用户将被更新。

在启动之前,您应该在 config/app_local.php 中正确设置默认和导入数据源。示例

'Datasources' => [
    // the target database
    'default' => [
        'className' => 'Cake\Database\Connection',
        'driver' => 'Cake\Database\Driver\Mysql',
        'host' => '***********',
        'port' => '***********',
        'username' => '***********',
        'password' => '***********',
        'database' => '***********',
        // ...
    ],
    // the remote database you want to you as source
    'import' => [
        'className' => 'Cake\Database\Connection',
        'driver' => 'Cake\Database\Driver\Mysql',
        'host' => '***********',
        'port' => '***********',
        'username' => '***********',
        'password' => '***********',
        'database' => '***********',
        // ...
    ],
],

用法示例

$ bin/cake import_project

TranslateFileCommand

此命令提供了一个使用翻译服务(例如,在 config/app_local.php 中设置)将文件内容从一种语言翻译成另一种语言的工具。

翻译服务配置示例

'Translators' => [
    'deepl' => [
        'name' => 'DeepL',
        'class' => '\BEdita\I18n\Deepl\Core\Translator',
        'options' => [
            'auth_key' => '************',
        ],
    ],
]

用法示例

$ bin/cake translate_file \
  --input articles-en.txt \
  --output articles-it.txt \
  --from en \
  --to it \
  --translator deepl

TranslateObjectsCommand

此命令提供了一个使用翻译服务(例如,在 config/app_local.php 中设置,如上所述)将对象内容从一种语言翻译成另一种语言的工具。

用法示例

# basic
$ bin/cake translate_objects \
  --from en \
  --to it \
  --engine deepl

# dry-run
$ bin/cake translate_objects \
  --from en \
  --to it \
  --engine deepl \
  --dry-run yes

# limit
$ bin/cake translate_objects \
  --from en \
  --to it \
  --engine deepl \
  --limit 10

# status
$ bin/cake translate_objects \
  --from en \
  --to it \
  --engine deepl \
  --status draft

# type
$ bin/cake translate_objects \
  --from en \
  --to it \
  --engine deepl \
  --type articles

实用工具

您可以在 src/Utility 文件夹中找到一些实用类。

CsvTrait

此特质提供了 readCsv 方法,用于逐行读取 csv 文件。

用法示例

use BEdita\ImportTools\Utility\CsvTrait;

class MyImporter
{
    use CsvTrait;

    public function import(string $filename): void
    {
        foreach ($this->readCsv($filename) as $obj) {
            // process $obj
        }
    }
}

FileTrait

此特质提供了 readFileStream 方法,用于打开“只读”文件流(您可以使用本地文件系统或适配器)。

用法示例

use BEdita\ImportTools\Utility\FileTrait;

class MyImporter
{
    use FileTrait;

    public function read(string $file): void
    {
        [$fh, $close] = $this->readFileStream($path);

        try {
            flock($fh, LOCK_SH);
            // do your stuff
        } finally {
            $close();
        }
    }
}

TreeTrait

此特质提供了 setParent 方法,用于为指定实体保存父实体。

用法示例

use BEdita\ImportTools\Utility\TreeTrait;

class MyImporter
{
    use TreeTrait;

    public function import(string $filename, string $destination): void
    {
        foreach ($this->readCsv($filename) as $obj) {
            $this->setParent($obj, $destination);
        }
    }
}

Import

此类提供了将数据从 csv 文件导入到 BEdita 的函数。

公开方法有

  • saveObjects:从 csv 读取数据并保存对象
  • saveObject:保存单个对象
  • saveTranslations:从 csv 读取数据并保存翻译
  • saveTranslation:保存单个翻译
  • translatedFields:获取给定对象的翻译字段

用法示例

use BEdita\ImportTools\Utility\Import;

class MyImporter
{
    public function import(string $filename, string $type, ?string $parent, ?bool $dryrun): void
    {
        $import = new Import($filename, $type, $parent, $dryrun);
        $import->saveObjects();
    }
}