【问题标题】:CSV Export showing HTML along with data. Why?CSV 导出显示 HTML 和数据。为什么?
【发布时间】:2014-01-15 00:08:05
【问题描述】:

这是我的代码,我正在使用https://github.com/sonata-project/exporter

$data = array(
                    0 => array(
                        'name' => 'Jack'
                    ),
                    1 => array(
                        'name' => 'Jill'
                    )
                );

    $format = 'csv';

                    // Filename
                    $filename = 'referral.csv';

                    // Set Content-Type
                    $content_type = 'text/csv';

                    // Location to Export this to
                    $export_to = 'php://output';

                    // Data to export
                    $exporter_source = new \Exporter\Source\ArraySourceIterator($data);

                    // Get an Instance of the Writer
                    $exporter_writer = '\Exporter\Writer\\' . ucfirst($format) . 'Writer';

                    $exporter_writer = new $exporter_writer($export_to);

                    // Set the right headers
                    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
                    header('Content-Description: File Transfer');
                    header('Content-type: ' . $content_type);
                    header('Content-Disposition: attachment; filename=' . $filename . ';');
                    header('Expires: 0');
                    header('Pragma: public');

                    // Export to the format
                    \Exporter\Handler::create($exporter_source, $exporter_writer)->export();

当我执行以下代码时,它会下载一个 CSV 文件,其中包含数组数据但也包含页面的 HTML。如何使导出仅包含数据数组的元素?

【问题讨论】:

  • blah 刚刚意识到我所要做的就是在最后一次调用后调用 exit 并修复它。
  • 调用exit其实是你能做的最糟糕的事情...
  • 谢谢。我将在下面研究您的示例并相应地修复我的代码。再次感谢
  • 您似乎非常精通这个库。我还有一个问题,想看看你能不能帮忙。 stackoverflow.com/questions/21127154/…

标签: php symfony export-to-csv


【解决方案1】:

此代码来自SonataCoreBundle,它将响应流式传输到客户端,因此有利于内存消耗:

use Exporter\Source\SourceIteratorInterface;
use Symfony\Component\HttpFoundation\StreamedResponse;

use Exporter\Writer\XlsWriter;
use Exporter\Writer\XmlWriter;
use Exporter\Writer\JsonWriter;
use Exporter\Writer\CsvWriter;

// ...

public function exportAction()
{
    $data = array(array('name' => 'Jack'), array('name' => 'Jill'));
    $source = new \Exporter\Source\ArraySourceIterator($data);
    $filename = 'file.csv'
    $format = 'csv';

    switch ($format) {
        case 'xls':
            $writer      = new XlsWriter('php://output');
            $contentType = 'application/vnd.ms-excel';
            break;
        case 'xml':
            $writer      = new XmlWriter('php://output');
            $contentType = 'text/xml';
            break;
        case 'json':
            $writer      = new JsonWriter('php://output');
            $contentType = 'application/json';
            break;
        case 'csv':
            $writer      = new CsvWriter('php://output', ',', '"', "", true, true);
            $contentType = 'text/csv';
            break;
        default:
            throw new \RuntimeException('Invalid format');
    }

    $callback = function() use ($source, $writer) {
        $handler = \Exporter\Handler::create($source, $writer);
        $handler->export();
    };

    return new StreamedResponse($callback, 200, array(
        'Content-Type'        => $contentType,
        'Content-Disposition' => sprintf('attachment; filename=%s', $filename)
    ));
}

【讨论】:

    猜你喜欢
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 2015-12-23
    • 1970-01-01
    • 2013-04-11
    • 2020-11-02
    • 2012-10-30
    相关资源
    最近更新 更多