lachlanhickey/laravel-csv-response

为 Laravel 添加 CSV 响应类型

v1.1.7 2020-08-30 02:53 UTC

This package is auto-updated.

Last update: 2024-09-29 05:48:54 UTC


README

Latest Stable Version Build Status Coverage Status

Laravel CSV Response

此包向 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 neoxia/laravel-csv-response

从 Laravel 5.5 开始,此包将自动发现并注册。对于 Laravel 的旧版本,请将服务提供者在 config/app.php 中添加。

Neoxia\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() 方法。此方法基于已经实现在内的 Eloquent 模型中的 jsonSerialize() 方法。它应该返回关联数组的数据。

例如

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,
]