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