Řízení výstupu – globální řešení
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- tany
- Člen | 31
Ahoj, přemýšlím nad unifikovaným řešením řízení requestu a response, jde mi o možnost nastavení templatu requestem (třeba pro ligth zobrazení odkazu z fb) … , a možnost poslat response jako payload.
Request mám vyřešený, tam to je o tom, co presenter povolí.
Ale nevím, jak inteligentně napsat řízení response, předpokládám, že nebude stačit jen zachytnout response a poslat ji jako payload.
Poradil by mi někdo ? Díky.
- tany
- Člen | 31
Tak primitivní řešení mě napadlo, rozhodně není kompletní a použití exit() považuju za humus.
<?php
protected function shutdown($response)
{
/* _payload jsou parametry pro rizeni zachycene a fitrovane v requestu,
* snippet je urcen k poslani puvodni text response v podobe snippetu,
* aby sel zpracovat js nette handlerem pro payload
*/
if(isset($this->_payload['snippet']) and $this->getHttpResponse()->getCode() == 200)
{
if($response instanceof \Nette\Application\Responses\TextResponse)
{
// kdyz uz tu ten objekt je, proc vytvaret vlastni ..
$this->payload->snippets[$this->_payload['snippet']] = (string)$response->getSource();
$this->_response = new \Nette\Application\Responses\JsonResponse($this->payload);
}
elseif ($response instanceof \Nette\Application\Responses\JsonResponse)
{
$this->_response = $response;
// zatim zbytecny
}
else
{
$this->_response = $response;
}
$res = new Nette\Http\Response();
$this->_response->send($this->getHttpRequest(),$res);
// nevim jak jinak zabranit aplikaci v poslani dalsi response, terminate zde jiz nejde.
exit();
}
else
{
parent::shutdown($response);
}
}
?>