Postupný výpis XML skriptem
- josef.sabl
- Člen | 153
Mám takovýto problém:
Mám dlouhý skript, který generuje dlouhé XML. O vytvoření XML se stará objekt, řekněme třída Export, metoda output();
Presenter by mohl tedy obsahovat toto:
$this->template->data = $Export->output();
a template např.:
{block content}
{$data}
Problém samozřejmě je, že se někde v paměti hromadí data a dojde paměť. Navíc se data nezačnou odesílat už v průběhu jejich generování, ale až nakonec v celku.
Pokus o řešení:
Metoda output() už data nevrací, místo toho, je rovnou echuje.
presenter:
$Export->output();
template:
{block content}
Moc s tím spokojený nejsem, přijde mi to jako prasárna a krom toho pak musím řešit skrývání Debugger Baru. Poradí někdo, jak tohle vyřešit v Nette čistě?
- Panda
- Člen | 569
Skrytí debug baru: stačí nastavit správný Content-Type
(=
jiný, než text/html
, v tvém případě
application/xml
). Debug bar se zobrazí jen v případě, že
posíláš HTML odpověď. Viz zdrojáky: https://github.com/…Debugger.php#L383
a https://github.com/…Debugger.php#L648
Čistší řešení: implementuj si vlastní Nette\Application\IResponse
.
Má jedinou metodu (send()
), v ní stačí nastavit správný
Content-Type
a pak si vyechovat výstup.
Použití je pak snadné:
public function renderExport() {
// ...
$this->sendResponse(new StreamingXmlExportResponse($export));
}