stazeni xlsx exportu bez fyzickeho ulozeni na disku

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
ali
Člen | 342
+
0
-

Zdravim,

mam takovy mensi problem, v drivejsi aplikaci, kde jsem jeste nepouzival Nette, ale ciste knihovnu phpExcel, sem download vygenerovanych dat resil timto jednoduchym kodem

    ...
    $writer = new PHPExcel_Writer_Excel2007($excel);
    header("Content-Type: application/vnd.ms-excel");
    header("Content-Disposition: attachment; filename=export.xlsx");
    $writer->save("php://output");

jenze v Nette je to uz nepouzitelne, protoze mi tam Nette do toho vlozi nejake dalsi data, ktere sice excel odstrani, ale naskakuji v nem zbytecne hlasky na odklikavani.. vi nekde jak tento problem vyresit?

Quinix
Člen | 108
+
+2
-

Asi nejlépe vytvořit implementaci IResponse třeba takto (tahle je pro XLS, uprav si to jak chceš…):

<?php

use Nette\Application\IResponse;
use Nette\Object;
use Nette;
use Nette\Utils\Strings;

class ExcelResponse extends Object implements  IResponse {

    /** @var \PHPExcel */
    private $excelObject;
    /** @var string */
    private $filename;

    public function __construct(\PHPExcel $excelObject, $filename)
    {
        $this->excelObject = $excelObject;
        $this->filename = $filename;
    }


    /**
     * Sends response to output.
     * @return void
     */
    public function send(Nette\Http\IRequest $httpRequest, Nette\Http\IResponse $httpResponse)
    {
        $httpResponse->setContentType('application/force-download');
        $httpResponse->setHeader('Content-Disposition', 'attachment;filename='.$this->filename);
        $httpResponse->setHeader('Content-Transfer-Encoding', 'binary');

        $writer = new \PHPExcel_Writer_Excel5($this->excelObject);
        $writer->save('php://output');
    }
}
?>

V presenteru ji pak už jen vytvoříš a odešleš:

<?php
    public function actionDownload() {
        //...
        $response = new ExcelResponse($excel, $filename);
        $this->sendResponse($response);
    }
?>

Editoval Quinix (1. 4. 2014 21:20)

ali
Člen | 342
+
0
-

super, funkcni, diky..