Error Presenter se začne načítat uprostřed renderu šablony

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

Ahoj,
řeším teď takový problém s Error presenterem a ACL. Mám v boostrapu na stavený presenter ‚Front:Error‘ pro vykreslování chyb. Což evidentně funguje – protože když si nasimuluju 404 chybu, tak mi to hezky vykreslí šablonu vč. layoutu, který normálně na stránce využívám. Na problém jsem ovšem narazil u ACL … v momentě, když parser narazi v šabloně na řádek:

{if $userAcl->isAllowed('article-'.$article->article_id, 'access')}

a dané resource neexistuje, tak se v tom místě render zastaví (co jsem vypozoroval, snad správně, že v tento moment se provede Forward na Error presenter) a začne se načítat default Nette error 500 šablona, což ve finále vypadá hodně špatně (celá stránka se rozpadne) – a co mě hlavně překvapuje, je to, že to nepoužije ani moji 500 šablonu i když ji v Error presenteru mám nastavenou a samotná šablona také existuje.

Error presenter vypadá takto:

<?php
class Front_ErrorPresenter extends BasePresenter
{
	public function renderDefault($exception)
	{
		if ($this->isAjax()) { // AJAX request? Just note this error in payload.
			$this->payload->error = TRUE;
			$this->terminate();

		} elseif ($exception instanceof BadRequestException) {
			$code = $exception->getCode();
			//$this->setView(in_array($code, array(403, 404, 405, 410, 500)) ? $code : '4xx'); // load template 403.phtml or 404.phtml or ... 4xx.phtml
			$this->setView('404'); // load template 404.phtml

		} else {
			$this->setView('500'); // load template 500.phtml
			Debug::log($exception, Debug::ERROR); // and log exception
		}
	}
}

Nemáte někdo nápad, jak toto ošetřit?

Díky za každou radu…

P.S.: používám Nette 2.0-dev a0e1687 released on 2010–10–08

Editoval iguana007 (9. 10. 2010 3:27)

phx
Člen | 651
+
0
-

Ono to snad moc rozumne resit nejde. Proste nastane chyba a tak se to presmeruje na Error Presenter, ale s odeslanym vystupem uz nejde nic udelat. But to vyres tak, ze zabranis vzniku chyby (vytvoris resource nebo overis nekde v presenteru a ne az v sablone). Nebo muzes zkusit nastylovat error stranku jako ladenku aby se preplacla pres jiz odeslany casti stranky.

iguana007
Člen | 970
+
0
-

aha, to jsem potreboval vedet, tak ja to vyresim v tom presenteru. Diky za radu ;)

Nilp
Člen | 65
+
0
-

Můžeš taky zapnout output buffer v presenteru.

phx
Člen | 651
+
0
-

@Nilp To mi prijde nevhodne.

  • naroste potreba pameti
  • prodlouzi se odezva aplikace
David Grudl
Nette Core | 8218
+
0
-

Experimentoval jsem s output bufferem, ktery se vypne po určitém časovém intervalu (např. 200ms), teoreticky by to bylo řešení, ale je to takové trošku na vodě.