在index(index所在类的完整代码)中添加如下代码:
if (config('admin.swoole') && request(Exporter::$queryName)) {
$grid = $this->grid();
return $grid->handleExportRequest(true);
}
需要修改laravel-admin的handleExportRequest
方法如下:
/**
* Handle export request.
*
* 要用pulic方法,因为兼容swoole,需要外部调用
*
* @param bool $forceExport
*/
public function handleExportRequest($forceExport = false)
{
if (!$scope = request(Exporter::$queryName)) {
return;
}
// clear output buffer.
if (ob_get_length()) {
ob_end_clean();
}
$this->disablePagination();
if ($this->builder) {
//要加这几行,不然没有过滤器无效了
call_user_func($this->builder, $this);
return $this->getExporter($scope)->export();
}
if ($forceExport) {
return $this->getExporter($scope)->export();
}
}
因为我是引入自己修改过的laravel-admin,所以直接修改的源码,如果你是引入原库的话,可以通过反射的方式直接在调用的地方写handleExportRequest方法中的内容。
- 然后要自己定义一个导出处理类,核心是不用
exit()
和用response()->streamDownload()
参考:
https://github.com/never615/laravel-admin-enhance/blob/master/src/Grid/Exporters/CsvExporter.php
PS. 话说可以的话管理端可以单独做一个项目,不用swoole,一般来说管理端的访问量没有那么大吧。
网友评论