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 时导出功能无法使用

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 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);
    }
2年前 评论
iwzh 2年前
狒狒达人 (楼主) 2年前
讨论数量: 19
2年前 评论
狒狒达人 (楼主) 2年前
薄荷蓝的晴天 (作者) 2年前
狒狒达人 (楼主) 2年前
狒狒达人 (楼主) 2年前
狒狒达人 (楼主) 2年前
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);
    }
2年前 评论
iwzh 2年前
狒狒达人 (楼主) 2年前

file

2年前 评论
meows 1年前

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

file

2年前 评论

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

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

优化了一下 export 的写法

file

2年前 评论
DogLoML

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

2年前 评论

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

file

1年前 评论
狒狒达人 (楼主) 1年前
狒狒达人 (楼主) 1年前
Ancient (作者) 1年前

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