mordilion / pipeline
一个PHP库,提供一种简单的方法来编写可配置的传输/导出,支持多种接口。
0.2
2024-05-29 09:23 UTC
Requires
- php: >=7.1 | >=8.0
- ext-pdo: *
- mordilion/configurable: ^0.7.3
Requires (Dev)
- phpunit/phpunit: ^10.3
- vimeo/psalm: ^5.15
This package is auto-updated.
Last update: 2024-08-29 09:53:51 UTC
README
Pipeline
描述
Pipeline是一个库,可以快速且可靠地传输数据,或创建支持任何类型接口(如PDO、SplFileObject(CSV等)、数组以及您的自定义实现)的导出。它使用https://github.com/mordilion/Configurable来实现完全可配置。
基本示例
<?php use Mordilion\Pipeline\Pipeline; use Mordilion\Pipeline\Reader\ArrayReader; use Mordilion\Pipeline\Writer\SplFileObjectWriter; $data = [ ['id' => 1, 'name' => 'John Doe', 'email' => 'john.doe@domain.invalid'], ['id' => 2, 'name' => 'Jane Doe', 'email' => 'jane.doe@domain.invalid'], ['id' => 3, 'name' => 'Max Mustermann', 'email' => 'max.mustermann@domain.invalid'] ]; $reader = new ArrayReader(); $reader->setData($data); $filename = __DIR__ . '/export.csv'; $writer = new SplFileObjectWriter(); $writer->setFile(new \SplFileObject($filename, 'w')) ->setMode(SplFileObjectWriter::MODE_CSV); $pipeline = new Pipeline(); $pipeline->setReader($reader) ->setWriter($writer) ->transfer();
数据库到CSV
一个示例,展示如何将数据库数据导出到CSV文件,并添加额外的列。
<?php use Mordilion\Pipeline\Pipeline; use Mordilion\Pipeline\Reader\PDOReader; use Mordilion\Pipeline\Writer\SplFileObjectWriter; $reader = new PDOReader(); $reader->setPdo(new \PDO('sqlite:' . __DIR__ . '/sqlite.db')) ->setSql('SELECT * FROM demo'); $filename = __DIR__ . '/export.csv'; $writer = new SplFileObjectWriter(); $writer->setFile(new \SplFileObject($filename, 'w')) ->setMode(SplFileObjectWriter::MODE_CSV); $pipeline = new Pipeline(); $pipeline->setReader($reader) ->setWriter($writer) ->transfer(function (array $row, ReaderAbstract $reader, WriterAbstract $writer) { $timestamps = [ 'created_at' => isset($row['created_at']) ? $row['created_at'] : date('Y-m-d H:i:s'), 'updated_at' => isset($row['updated_at']) ? $row['updated_at'] : date('Y-m-d H:i:s'), 'exported_at' => date('Y-m-d H:i:s') ]; return array_merge($row, $timestamps); });
目录列表到CSV
一个示例,展示如何将数据库数据导出到CSV文件,并添加额外的列。
<?php use Mordilion\Pipeline\Pipeline; use Mordilion\Pipeline\Reader\ExecReader; use Mordilion\Pipeline\Writer\SplFileObjectWriter; $reader = new ExecReader(); $reader->setCommand('ls /'); $filename = __DIR__ . '/directory-listing.csv'; $writer = new SplFileObjectWriter(); $writer->setFile(new \SplFileObject($filename, 'w')) ->setMode(SplFileObjectWriter::MODE_CSV); $pipeline = new Pipeline(); $pipeline->setReader($reader) ->setWriter($writer) ->transfer();