bedita / import-tools
bedita 数据导入工具
v1.5.0
2024-09-05 10:27 UTC
Requires
- php: >= 7.4
- bedita/api: ^5.27
- bedita/core: ^5.27
- bedita/i18n: ^4.4
- cakephp/cakephp: ^4.5
- fakerphp/faker: ^1.23
Requires (Dev)
- cakephp/cakephp-codesniffer: ~4.7
- phpstan/extension-installer: ^1.0
- phpstan/phpstan: ^1.8
- phpstan/phpstan-deprecation-rules: ^1.0
- phpunit/phpunit: ^9.5
README
安装
首先,如果尚未创建 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(); } }