symfony将html.twig导出到csv

时间:2013-12-18 17:35:16

标签: php symfony csv

我正在尝试将树枝视图导出到csv中,但我被卡住了,有人可以帮我解决详细解决方案吗? 和平

/**
 *  
 * @Route("/export", name="export_csv")
 */
public function exportAction() {

    $entity = new Invite();
    $form = $this->createForm(new ManifSearchType(), $entity);
    $request = $this->get('request');

    $em = $this->getDoctrine()->getManager();

    $view = $this->render('PrifProtocoleBundle:Invite:index.html.twig', array(
        'form' => $form->createView()));

    $handle = fopen('php://memory', 'r+');
    $header = array();

    fputcsv($handle, $view);

    rewind($handle);

    $content = stream_get_contents($handle);
    fclose($handle);

    return new Response($content, 200, array(
        'Content-Type' => 'application/force-download',
        'Content-Disposition' => 'attachment; filename="export.csv"'
    ));
} 

错误消息:

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

3 个答案:

答案 0 :(得分:5)

问题是,您不是只想将树枝转换为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格式呈现。

答案 1 :(得分:1)

试试这个:

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

答案 2 :(得分:0)

老问题,但是当我搜索某种方法将渲染的csv视图保存在文件中时,我来到了这里。 使用Symfony 3.3(当前版本今天05/09/2017),添加了一个新的文件系统方法:

$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();
}

我还没有测试过,但它应该有用。

来源文档: https://symfony.com/doc/current/components/filesystem.html#appendtofile