【问题标题】:How to download a csv file with symfony 4?如何使用 symfony 4 下载 csv 文件?
【发布时间】:2020-11-03 16:45:52
【问题描述】:

我正在尝试使用 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? 它下载一个文件,但它是空的。

【问题讨论】:

标签: csv symfony symfony4


【解决方案1】:

我会选择这样的:

How to create a link that download a file in Symfony

但要使其正常工作,您需要将内容放入一个临时 csv 文件中。

希望这会有所帮助,注意安全!

【讨论】:

    【解决方案2】:

    我找到了解决办法。

    事实上,我有两个问题: 首先是我应该以正确的格式设置标题。 第二个是 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;
    }
    

    感谢大家的帮助。

    【讨论】:

      猜你喜欢
      • 2019-10-08
      • 2015-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-21
      相关资源
      最近更新 更多