網(wǎng)上的解決方案幾乎是使用改源碼, 但是一旦項目進行composer update
那修改的東西就沒了
我參考了哈皮人的全棧技術(shù)博客寫了一套通過繼承的解決方案
- 在
app/Admin/Extentsions
中添加一個自定義導出類
<?php
namespace App\Admin\Extensions;
use Encore\Admin\Grid\Column;
use Encore\Admin\Grid\Exporters\CsvExporter;
class MyCsvExporter extends CsvExporter
{
// 這個方法照搬自CsvExporter的export方法
public function export()
{
if ($this->callback) {
call_user_func($this->callback, $this);
}
$response = function () {
$handle = fopen('php://output', 'w');
$titles = [];
// 方法中所有的內(nèi)容都沒改, 只有添加了下面一行的代碼
fputs($handle, chr(0xEF).chr(0xBB).chr(0xBF), 3);
$this->chunk(function ($collection) use ($handle, &$titles) {
Column::setOriginalGridModels($collection);
$original = $current = $collection->toArray();
$this->grid->getColumns()->map(function (Column $column) use (&$current) {
$current = $column->fill($current);
$this->grid->columnNames[] = $column->getName();
});
// Write title
if (empty($titles)) {
fputcsv($handle, $titles = $this->getVisiableTitles());
}
// Write rows
foreach ($current as $index => $record) {
fputcsv($handle, $this->getVisiableFields($record, $original[$index]));
}
});
fclose($handle);
};
response()->stream($response, 200, $this->getHeaders())->send();
exit;
}
}
- 在
app/Admin/bootstrap.php
中添加以下代碼
use Encore\Admin\Grid\Exporter;
use App\Admin\Extensions\MyCsvExporter;
Exporter::extend('export', MyCsvExporter::class);
// export為我設置的別名, 你們可以任意改成其他的
3.在需要的地方使用
$grid->exporter('export');