Redirect v továrničce presenteru

ondrej256
Člen | 186
+
0
-

Ahoj,

můžu přímo v createComponent metodách odchytávat výjímku a dělat redirect? viz. příklad.

MyPresenter.php

protectec function cretaeComponentList()
{
   try {
      return $this->listFactory->create(); // komponenta list je napojena na externi system odkud taha data
   } catch (\Exception $e) {
      // spadne to na vyjimce, že se nepodařilo navázat spojení s externím systémem.
      $this->flashMessage('Nastala chyba při spojení s externím systémem. zkuste to později');
      $this->redirect('default'); // tohle vyhodí AbortException a k přesměrování nedojde.
   }
}

Není mně moc jasné, proč to tady padá na AbortException. V akcích už přece můžu používat redirect a createComponent se volá až po akci. Takže by tu neměl být problém ne?

mystik
Člen | 291
+
+1
-

To bude tim ze se ti to vola az v prubehu renderovani stranky. Komponenty se vyrabi az jsou potreba coz je obvykle az render odpovedi narazi na {control}. Tam uz je na redirect pozde protoze se uz zacal odesilat obsah.

ondrej256
Člen | 186
+
0
-

jo aha. jasně. dík

dakur
Člen | 493
+
+1
-

Můžeš si ale data vytáhnout z modelu v action metodě (tam ošetříš chyby s napojením na ext. systém) a pak si je předat create: $this->listFactory->create($this->data)

Marek Bartoš
Nette Blogger | 1167
+
+4
-

Nejrychlejší fix je v beforeRender() vytvořit komponentu přes $this['list']

Editoval Marek Bartoš (9. 8. 2022 10:40)