在symfony2中从数组创建文件

时间:2013-04-13 17:41:21

标签: file symfony csv

我必须使用symfony2控制器创建一个数组,并将该数组作为csv文件返回,以便用户可以下载它.Wat是最好的方法吗?我不想将此文件存储在服务器中..

2 个答案:

答案 0 :(得分:0)

这与Symfony无关,但你可以在PHP中轻松完成这项工作:

<?php
$lines = array(
    array('foo', 'bar', 'baz'),
    array('lorem', 'ipsum', 'dolor'),
);

foreach ($lines as $line) {
    for ($i = 0; $i < count($line); $i++) {
        echo $line[$i];

        if ($i < count($line) - 1) {
            echo ",";
        } else {
            echo "\n";
        }
    }
}

答案 1 :(得分:0)

您可以通过创建数据字符串然后将其作为Response对象返回来实现。

您的数据,例如......

$lines = array(
    array('some', 'random', 'stuff'),
    array('in', 'an', 'array'),
);

设置变量

$delimeter = ','; // Set the delimeter
$enclosure = '"'; // Set the enclosure
$filename = uniqid(); // Set the filename, for this a unique id

在线条和字段之间循环,然后将它们组合成一个字符串(如果在字段中使用,也会使用双倍的外壳)

$content = '';

foreach ($lines as $line)
{
    $fields = array();
    foreach ($line as $field)
    {
        $fields[] = $enclosure . str_replace($enclosure,
                        $enclosure . $enclosure, $field) . $enclosure;
    }
    $content .= implode($delimeter, $fields) . "\n";
}

创建并将响应对象集作为可下载文件返回

$response = new Response($content);
$response->headers->set('Content-Type', 'application/csv');
$response->headers->set('Content-Disposition', 
                            sprintf('attachment; filename="%s.csv"', $filename));

return $response;