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

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
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

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

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