问题描述
我正在尝试使用symfony 4下载一个csv文件。 我阅读了文档。 我知道我必须规范我的对象并在csv中编码。
我的控制器:
/**
* @Route("/export.csv",name="exportcsv",options={"expose"=true},methods={"GET","POST"})
*
**/
public function exportcsv(){
$sessionuser = $this->session->get('user');
$user = $this->finduser($sessionuser);
$datas = $this->getDoctrine()->getRepository(Object::class)-> findBy(['Event'=> $user->getEvent()]);
$encoders = [new Csvencoder()];
$normalizers = array(new Objectnormalizer());
$serializer = new Serializer($normalizers,$encoders);
$csvContent = $serializer->serialize($datas,'csv');
return new Response($csvContent);
}
当我尝试沿着这条路线行驶时,我可以在浏览器中以CSV格式查看所有数据。 例如,我有:
NameColumn1,NameColumn2,NameColumn3
Data1Column1,Data1Column2,Data1Column3
Data2Column1,Data2Column2,Data2Column3
我读到,这是创建csv文件的好格式。
如果有人有解决方案,那就太好了。我在上面呆了一个星期,我完全迷路了。
谢谢。
编辑:顺便说一下,我尝试了此解决方案How to force download a .csv file in Symfony 2,using Response object? 它下载了一个文件,但是它是空的。
解决方法
我会选择这样的东西:
How to create a link that download a file in Symfony
但是要使其正常工作,您需要将内容放入一个临时的csv文件中。
希望这会有所帮助,保持安全!
,我找到了解决方法。
实际上,我有2个问题: 首先是我应该将标题设置为正确的格式。 第二个是Visual Studio代码,他们没有在代码的两个注释部分之间读取代码。
有关信息,这是我的新代码。如果它可以帮助任何人;)
/**
* @Route("/export.csv",name="exportcsv",options={"expose"=true},methods={"GET","POST"})
*
**/
public function exportcsv(){
$sessionuser = $this->session->get('user');
$user = $this->finduser($sessionuser);
//search all the datas of type Object
$datas = $this->getDoctrine()->getRepository(Object::class)-> findBy(['Event'=> $user->getEvent()]);
// normalization and encoding of $datas
$encoders = [new CsvEncoder()];
$normalizers = array(new ObjectNormalizer());
$serializer = new Serializer($normalizers,$encoders);
$csvContent = $serializer->serialize($datas,'csv');
$response = new Response($csvContent);
$response->headers->set('Content-Encoding','UTF-8');
$response->headers->set('Content-Type','text/csv; charset=UTF-8');
$response->headers->set('Content-Disposition','attachment; filename=sample.csv');
return $response;
}
感谢大家的帮助。