如何使用symfony 4下载CSV文件?

问题描述

我正在尝试使用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文件的好格式。

我想知道我要生成的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;
}

感谢大家的帮助。