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