madewithlove / export
从Web应用程序导出文件时的接口和基本实现
Requires
- php: >=5.5.0
Requires (Dev)
- league/csv: ^8.0
- phpunit/phpunit: ^4.8
- symfony/http-foundation: ^2.6|^3.0
- zendframework/zend-diactoros: ^1.3
This package is not auto-updated.
Last update: 2024-09-14 18:04:24 UTC
README
使用方法
在一段代码示例中它的作用
// A list of users to export. $users = [ [ 'username' => 'John Doe', 'email' => 'john.doe@gmail.com', ], [ 'username' => 'Jane Doe', 'email' => 'jane.doe@gmail.com', ], ]; // Create a new CSV exporter object. $exporter = new Madewithlove\Export\Csv\Exporter(); // Create a new custom Transformer object (an anonymous class, only in PHP 7) $transformer = new class implements Madewithlove\Export\Csv\Transformer, Madewithlove\Export\Csv\WithHeaders { public function getHeaders() { return ['username', 'email']; } public function transform(array $user) { return [ $user['username'], $user['email'], ]; } }; $exporter->setItems($users); $exporter->setTransformer($transformer); // New controller being (an anonymous class, only in PHP 7) $controller = new class { use Madewithlove\Export\Http\Psr7Response; /** * @param Madewithlove\Export\Exporter $exporter */ public function index(Exporter $exporter) { return $this->fileDownload($exporter->getContent(), 'users.csv'); } }; $psrResponse = $controller->index($exporter);
CSV导出器
包含的CSV导出器(Madewithlove\Export\Csv\Exporter
)将创建CSV导出文件的文件内容。为此,它使用了league/csv
包中的Writer类,但这只是一个实现细节。它遵循Madewithlove\Export\Exporter
接口(您可以自由地创建XML或其他导出器实现),并在调用它的getContent()
方法时返回文件内容。您可以通过将数组或Iterator
(如Generator
)传递给setItems($items)
方法来定义它应该导出哪些项目。您还可以可选地设置一个Transformer来对给定项目的每一行应用转换。此Transformer
由League\Csv\Writer
类使用,并可实现Madewithlove\Export\Csv\WithHeaders
协议,以便让写入器知道CSV文件应该有哪些标题。
转换器
转换器对象有一个transform(array $row) : array
方法,允许您对每一行进行转换。接口Madewithlove\Export\Csv\WithHeaders
定义了一个getHeaders() : array
方法,它返回CSV文件中应使用的标题。
此包还包括一些通用用途的转换器实现
可调用转换器
这允许您使用任何可调用(函数)而不必创建实现转换器接口的类。通过使用工厂方法创建一个,或者使用设置方法
use Madewithlove\Export\Csv\Transformers\CallableTransformer; $transformer = (new CallableTransformer())->setTransformer(function (array $row) {...}); $transformer = CallableTransformer::fromCallable(function (array $row) {...});
空转换器,仅标题
当您不需要对行进行转换,但您希望将标题插入CSV文件时,请使用JustHeaders
转换器类
use Madewithlove\Export\Csv\Transformers\JustHeaders; $transformer = (new JustHeaders())->setHeaders(['username', 'email']); $transformer = JustHeaders::fromHeaders(['username', 'email']);
标题装饰器
当您已有现有的Transformers对象,但希望它也向CSV文件添加标题时,您无需扩展它。只需用WithHeadersDecorator
包装它即可
use Madewithlove\Export\Csv\Transformers\JustHeaders; $transformer = new WithHeadersDecorator($reusedTransformer, $headers); $transformer = (new WithHeadersDecorator($reusedTransformer))->setHeaders($headers);
HTTP响应对象
支持Symfony和PSR-7响应对象。在控制器中使用Madewithlove\Export\Http\SymfonyResponse
或Madewithlove\Export\Http\Psr7Response
特性来使用fileDownload($content, $filename)
方法创建文件下载响应对象。这需要您安装symfony/http-foundation
包或zendframework/zend-diactoros
包。
安装
为了通过composer安装它,您应该运行以下命令
composer require madewithlove/export
测试
$ vendor/bin/phpunit
致谢
许可
MIT许可(MIT)。请参阅许可文件以获取更多信息。