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
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
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)