如何使用 symfony 4 下载 csv 文件?
How to download a csv file with symfony 4?
我正在尝试使用 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 的良好格式显示。
例如,我有:
名称列 1、名称列 2、名称列 3
数据 1 列 1、数据 1 列 2、数据 1 列 3
Data2Column1、Data2Column2、Data2Column3
我读到它是创建 csv 文件的好格式。
我想知道我要生成csv文件。
如果有人有解决方案,那就太棒了。我用了一个星期,完全迷路了。
谢谢。
编辑:顺便说一句,我尝试了这个解决方案 How to force download a .csv file in Symfony 2, using Response object?
它下载了一个文件,但它是空的。
我会选择这样的东西:
但要使其正常工作,您需要将内容放入一个临时的 csv 文件中。
希望这对您有所帮助,注意安全!
我找到了解决方案。
事实上,我有两个问题:
首先是我应该以正确的格式设置 headers 。
第二个是 Visual studio 代码,他们没有阅读代码的 2 个注释部分之间的代码。
有关信息,这是我的新代码。如果它可以帮助任何人 ;)
/**
* @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;
}
感谢大家的帮助。
我正在尝试使用 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 的良好格式显示。 例如,我有:
名称列 1、名称列 2、名称列 3
数据 1 列 1、数据 1 列 2、数据 1 列 3
Data2Column1、Data2Column2、Data2Column3
我读到它是创建 csv 文件的好格式。
我想知道我要生成csv文件。
如果有人有解决方案,那就太棒了。我用了一个星期,完全迷路了。
谢谢。
编辑:顺便说一句,我尝试了这个解决方案 How to force download a .csv file in Symfony 2, using Response object? 它下载了一个文件,但它是空的。
我会选择这样的东西:
但要使其正常工作,您需要将内容放入一个临时的 csv 文件中。
希望这对您有所帮助,注意安全!
我找到了解决方案。
事实上,我有两个问题: 首先是我应该以正确的格式设置 headers 。 第二个是 Visual studio 代码,他们没有阅读代码的 2 个注释部分之间的代码。
有关信息,这是我的新代码。如果它可以帮助任何人 ;)
/**
* @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;
}
感谢大家的帮助。