Php symfony将html.twig导出为csv

Php symfony将html.twig导出为csv,php,symfony,csv,Php,Symfony,Csv,我正在尝试将细枝视图导出到csv,但我被卡住了,有人能帮我解决这个问题吗? 和平 错误消息: Warning: fputcsv() expects parameter 2 to be array, object given in C:\wamp\www\protocole\src\Prif\ProtocoleBundle\Controller\InviteController.php line 56 试试这个: fputcsv($handle, (array)$view); 问题是,您并不

我正在尝试将细枝视图导出到csv,但我被卡住了,有人能帮我解决这个问题吗? 和平

错误消息:

Warning: fputcsv() expects parameter 2 to be array, object given in C:\wamp\www\protocole\src\Prif\ProtocoleBundle\Controller\InviteController.php line 56 
试试这个:

fputcsv($handle, (array)$view);

问题是,您并不是在尝试将一根树枝转换为CSV文件。您正在将HTML转换为CSV文件。现在看来这是一个奇怪的转变

你应该做的是让你的小枝生成CSV内容。像这样:

$response = $this->render('PrifProtocoleBundle:Invite:export.csv.twig',array('data' => $data));
$response->headers->set('Content-Type', 'text/csv');
$response->headers->set('Content-Disposition', 'attachment; filename="export.csv"');
return $response;

你的小枝应该以CSV格式呈现。

老问题,但我是在搜索将呈现的CSV视图保存到文件中的方法时来到这里的。 Symfony 3.3(当前版本为2017年9月5日)添加了一种新的文件系统方法:

$fs->appendToFile('my.csv', $view);
完整的例子可以是:

use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Filesystem\Exception\IOExceptionInterface;

$fs = new Filesystem();

try {
    $fs->appendToFile('my.csv', $view);
} catch (IOExceptionInterface $e) {
    echo "An error occurred while adding contents ".$e->getPath();
}
我还没有测试,但它应该可以工作

来源文件:

您的
index.html.twig
是否实际为html格式?如果是csv格式的,有更好的方法输出csv文件。您好,谢谢您的回复。我没有很好地解释我的问题,实际上我想要的是将通过index.html.twig显示的html表单导出到csv文件中。您好,您的解决方案有效。它会在excel上打开文件export.csv。那很好。但是我想要的html表单不在文件中。实际上,我的index.html.twig在呈现一个表单,我希望这个html表单位于这个csv文件中。你知道我如何更改代码来实现这一点吗?谢谢如果您需要获取纯HTML内容,请尝试renderView而不是render.hi,谢谢您的回复。我没有很好地解释我的问题,实际上我想要的是将通过index.html.twig显示的html表单导出到csv文件中,是否可行?在我给您的代码中,传递的$data是$form->getData()。您不应该呈现HTML以转换为CSV,这是没有意义的。你已经有你的数据了。从那里创建一个CSV。当有人提交表单时,您处理请求,检查表单是否有效,然后使用表单数据呈现CSV。因此,您有一个HTML细枝来显示表单,因此用户输入数据。一旦提交的数据有效,就有一个CSV细枝来呈现要导出的CSV。你应该有2个细枝文件。这有道理吗?嗨,谢谢你这么精确,我现在明白了。它工作得很好嗨,我还有一个问题,我创建了一个表单,其中有一个包含10个值的选择框。在$form->getData之后,我想首先返回一个html表中的响应(result.html.twig),然后能够通过这个html文件中的链接导出csv文件(export.csv.twig)。在我的控制器中,我做了如下操作:$response1呈现html文件,而$response2呈现csv文件。但我只返回$response1,所以我被卡住了。你认为这是正确的方法,还是有更好的解决方案?谢谢,您应该首先返回HTML响应,以及您获得的数据和导出到CSV的链接。在生成CSV的链接中,您可以添加参数(10个字段)以生成CSV文件。这将是一个长期的联系。如果这对您来说是不可接受的,那么您应该有一种缓存数据的方法(例如使用APC)。因此,当您使用10个字段呈现HTML表时,您还可以缓存数据。当您单击“导出CSV”时,在您的操作中,您将获取缓存中的数据,并从缓存中呈现CSV。这就是我要做的。
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Filesystem\Exception\IOExceptionInterface;

$fs = new Filesystem();

try {
    $fs->appendToFile('my.csv', $view);
} catch (IOExceptionInterface $e) {
    echo "An error occurred while adding contents ".$e->getPath();
}