zegitz / laravel-csv-response
为Laravel添加CSV响应类型
Requires
- php: >=5.5.9
- illuminate/routing: 5.1.*|5.2.*|5.3.*|5.4.*|5.5.*|5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0
- illuminate/support: 5.1.*|5.2.*|5.3.*|5.4.*|5.5.*|5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0
Requires (Dev)
- mockery/mockery: 0.9.*
- phpunit/phpunit: 4.8.*
- satooshi/php-coveralls: ^1.0
README
此包为Laravel的ResponseFactory
类添加CSV响应类型。因为CSV是一种数据格式,就像JSON一样,应该可以用这种格式来响应请求。
$data = [ ['first_name', 'last_name'], ['John', 'Doe'], ['Jane', 'Doe'], ]; return response()->csv($data);
这个小包提供了一个直接简单的解决方案,处理从数组或对象集合到逗号分隔值字符串的转换,以及字符编码。
免责声明
这个包只是创建CSV响应的便捷助手,无需烦恼。
如果您想要生成具有许多选项和更高鲁棒性的CSV(或Excel)文件,请查看Maatwebsite/Laravel-Excel。
安装
使用以下命令使用composer安装此包
composer require zegitz/laravel-csv-response
从Laravel 5.5开始,此包将自动发现并注册。对于旧版本的Laravel,请将服务提供者在config/app.php
中添加。
Zegitz\Routing\ResponseFactoryServiceProvider::class,
用法
基本数据格式
csv()
方法对数据格式非常灵活。以下所有示例都返回相同的响应。
response()->csv(collect( new User(['first_name' => 'John', 'last_name' => 'Doe']), new User(['first_name' => 'Jane', 'last_name' => 'Doe']), )); response()->csv([ ['first_name', 'last_name'], ['John', 'Doe'], ['Jane', 'Doe'], ]); response()->csv([ ['first_name' => 'John', 'last_name' => 'Doe'], ['first_name' => 'Jane', 'last_name' => 'Doe'], ]); response()->csv("first_name;last_name\r\nJohn;Doe\r\nJane;Doe");
作为行的对象
如果传递给方法的数组数据的“行”是对象,则必须在这些对象中实现csvSerialize()
方法。此方法基于已实现的相同原则的jsonSerialize()
方法,该方法已集成到Eloquent模型中。它应该返回关联数组的数据。
例如
class User { public function csvSerialize() { return [ 'first_name' => $this->first_name, 'last_name' => $this->last_name, ]; } }
CSV第一行
当数据集合的“行”是关联数组或对象时,该包使用第一行的键来定义CSV响应的第一行。这第一行通常用作此类文件中的列标题。
为了得到一致的响应,您必须确保数据集合中的每一行都有相同数量的值,并且键的顺序相同。
其他参数
基于Laravel的json()
函数,csv()
函数的声明如下。
public function csv($data, $status = 200, array $headers = [], array $options = [])
状态
通常,您应该返回状态为200 Ok的CSV,但您可以发挥创意。也许您正在构建一个完整的REST-CSV API ;)
头信息
此响应的默认头信息如下,但可以覆盖它。
[ 'Content-Type' => 'text/csv; charset=WINDOWS-1252', 'Content-Encoding' => 'WINDOWS-1252', 'Content-Transfer-Encoding' => 'binary', 'Content-Description' => 'File Transfer', ]
注意,如果选项中指定了自定义编码,则默认字符集和编码将自动覆盖(见下文)。
选项
最后一个参数允许您定义CSV的构建和格式化方式。我们定义了一个非常适合大多数情况的格式,但最佳配置可能取决于您的环境(语言、Microsoft Office版本等)。
默认选项如下。
[ 'encoding' => 'WINDOWS-1252', 'delimiter' => ';', 'quoted' => true, 'include_header' => true, ]