Zend Framework 2 - 渲染CSV数据

Far*_*ina 1 csv zend-framework2

我有一个模型,返回带有ID,名称,价格等的汽车数据.所以我有一个汽车控制器和一个从模型中获取此数据的csv动作:

$carTable = $this->getServiceLocator()->get('Application\Model\DbTable\Cars');
$cars = $carTable->fetchAll();
Run Code Online (Sandbox Code Playgroud)

我需要将此"$ cars"数据下载为CSV文件,以便用户将其存储在磁盘上.

我试图禁用布局并回显CSV字符串并设置"内容类型"和其他标题,但它没有开箱即用.然后我发现我应该创建一个自定义的CsvRenderer并在配置中注册它.

由于我在ZF2网站或博客和Stackoverflow答案中找不到任何关于此的文档,我想知道这是否是在ZF2中将数据下载为CSV的推荐通用方法?还是有一个我不知道的更简单的解决方案?

谢谢

Rob*_*len 11

一种解决方案是直接从控制器返回Response对象.

这样的事情有很好的工作机会:

public function downloadAction()
{
    // magically create $content as a string containing CSV data

    $response = $this->getResponse();
    $headers = $response->getHeaders();
    $headers->addHeaderLine('Content-Type', 'text/csv');
    $headers->addHeaderLine('Content-Disposition', "attachment; filename=\"my_filen.csv\"");
    $headers->addHeaderLine('Accept-Ranges', 'bytes');
    $headers->addHeaderLine('Content-Length', strlen($content));

    $response->setContent($content);
    return $response;
}
Run Code Online (Sandbox Code Playgroud)

(请注意,我没有测试过这段代码,但是根据评论进行了更新!)

  • 有人应该编辑答案以反映出有效的代码。 (2认同)