Postupný výpis XML skriptem

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

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
+
0
-

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#L383https://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));
}
josef.sabl
Člen | 153
+
0
-

To je ono, díky :)