Dcat Admin 使用 Laravel Octane 时导出功能无法使用

1. 运行环境

Laravel Octane Swoole Server
php 8.0

1). 当前使用的 Laravel 版本?

laravel 8.x
dcat/laravel-admin 2.*
dcat/easy-excel ^1.0
//: <> (使用 php artisan --version 命令查看)

2). 当前使用的 php/php-fpm 版本?

PHP 版本:8.0

php-fpm 版本:无

3). 当前系统

Ubuntu 21.04
//: <> (期待数值 Windows 10 / Ubuntu 20.4 / CentOS 8 )

4). 业务环境

生产环境
//: <> (期待信息 开发环境生产环境)
//: <> (是否使用负载均衡?请提供相关信息)

5). 相关软件版本

2. 问题描述?

导出功能无法使用

3. 您期望得到的结果?

希望能正常导出 Excel 文件
//: <> (能截图就截图。)

4. 您实际得到的结果?

Dcat Admin 使用 Laravel Octane 时导出功能无法使用

5. 报错信息

Dcat Admin 使用 Laravel Octane 时导出功能无法使用

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
DogLoML
最佳答案

swoole不能调用exit方法,而dcat自带的导出类里面用了exit所以会报错。

需要重写控制器的index方法,导出请求直接return $grid->handleExportRequest();,然后在导出类的export方法里面返回下载响应,代替exit

    public function index(Content $content) {
        $grid = $this->grid();

        if (request($grid->exporter()->getQueryName())) {
            $grid->callBuilder();
            return $grid->handleExportRequest();
        }

        return $content
            ->translation($this->translation())
            ->title($this->title())
            ->description($this->description()['index'] ?? trans('admin.list'))
            ->body($grid);
    }
1年前 评论
iwzh 1年前
狒狒达人 (楼主) 1年前
讨论数量: 19
1年前 评论
狒狒达人 (楼主) 1年前
薄荷蓝的晴天 (作者) 1年前
狒狒达人 (楼主) 1年前
狒狒达人 (楼主) 1年前
狒狒达人 (楼主) 1年前
DogLoML

swoole不能调用exit方法,而dcat自带的导出类里面用了exit所以会报错。

需要重写控制器的index方法,导出请求直接return $grid->handleExportRequest();,然后在导出类的export方法里面返回下载响应,代替exit

    public function index(Content $content) {
        $grid = $this->grid();

        if (request($grid->exporter()->getQueryName())) {
            $grid->callBuilder();
            return $grid->handleExportRequest();
        }

        return $content
            ->translation($this->translation())
            ->title($this->title())
            ->description($this->description()['index'] ?? trans('admin.list'))
            ->body($grid);
    }
1年前 评论
iwzh 1年前
狒狒达人 (楼主) 1年前

file

1年前 评论
meows 1年前

配合重写index 的方法,我修改的 export 方法如下:

file

1年前 评论

开启导出的使用使用自己重写的 export 方法 如下:```php

$grid->export( new App\Admin\Extensions\ExcelExporter() )->filename('邀约数据');
1年前 评论

优化了一下 export 的写法

file

1年前 评论
DogLoML

可以试试我这个包,已经对swoole的exit问题做了处理 dcat导出扩展包

1年前 评论

请问解决了嘛,我按照你的方法导出,并没有响应直接是刷新了当前页面

file

9个月前 评论
狒狒达人 (楼主) 9个月前
狒狒达人 (楼主) 9个月前
Ancient (作者) 9个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!