harborcompliance/cakephp-xlsxview

为 CakePHP 定制的 XLSX 查看类

dev-main 2022-02-03 17:21 UTC

This package is auto-updated.

Last update: 2024-09-29 06:14:42 UTC


README

安装

您可以使用 composer 将此插件安装到您的 CakePHP 应用程序中。

安装 composer 包的推荐方法是

composer require harborcompliance/cakephp-xlsxview

启用插件

通过运行以下命令加载插件:

bin/cake plugin load XlsxView

用法

将数组写入 xlsx 文件的基本示例。

public function export()
{
    $data = [
        ['id' => 1, 'name' => 'Alex', 'email' => 'alex@example.com'],
        ['id' => 2, 'name' => 'Jason', 'email' => 'jason@example.com'],
    ];

    $this->set(compact('data'));
    $this->viewBuilder()
        ->setClassName('XlsxView.Xlsx')
        ->setOption('serialize', 'data');
}

您可以选择指定一个可选的标题,该标题将成为您 xlsx 文件的第一个行。

public function export()
{
    $data = [
        ['id' => 1, 'name' => 'Alex', 'email' => 'alex@example.com'],
        ['id' => 2, 'name' => 'Jason', 'email' => 'jason@example.com'],
    ];

    $header = ['ID', 'Name', 'Email'];

    $this->set(compact('data'));
    $this->viewBuilder()
        ->setClassName('XlsxView.Xlsx')
        ->setOptions([
            'serialize' => 'data',
            'header' => $header,
        ]);
}

自动视图类切换

您可以使用路由器的扩展解析功能和 RequestHandlerComponent 自动使用 XlsxView 类。

通过在应用的 routes.php 中使用 Router::extensions('xlsx') 或在所需范围内使用 $routes->addExtensions() 启用对所有路由的 xlsx 扩展解析。

// UsersController.php

// In your controller's initialize() method:
$this->loadComponent('RequestHandler');

// Controller action
public function index()
{
    $users = $this->Users->find();
    $this->set(compact('users'));

    if ($this->request->is('xlsx')) {
        $this->viewBuilder()->setOptions([
            'serialize' => 'users',
            'header' => $header,
        ]);
    }
}

使用上述控制器,现在您可以访问 /users.xlsx 或使用 Acceptapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet 获取 xlsx 文件格式的数据,使用 /users 获取正常 HTML 页面。

设置下载文件名

默认情况下,下载的文件将使用 URL 的最后一部分命名。要显式设置文件名,请使用 Response::withDownload() 方法。

public function export()
{
    // ...

    $this->response = $this->response->withDownload('users.xlsx');
}