Presmerovanie z komponenty

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

Zdravím,
včera na chate sme riešili presmerovanie z komponenty – aj keď sme sa nakoniec dopracovali k funkčnému zápisu, stále mi toto správanie pripadá čudné a možno by to chcelo nejak prerobiť, aby to aspoň vyhodilo nejakú výnimku pri volaní prázdnej komponenty.

Ide o to, že keď sa presmerúva z komponenty ($this->redirect(„:Modul:Presenter:action“)), tak mne neznámym spôsobom sa pri tom vytvorí volanie prázdnej komponenty (teda $this->getComponent()). To však pri nových komponentách vytvorí dosť nepeknú rekurziu, keďže ak sa v createComponent neuvedie $name, tak bude táto funkcia donekonečna volať sama seba (viz. http://code.google.com/…/Control.php#59), až to nakoniec skončí chybou o nedostatku pamäte.

Jediné riešenie, ktoré nakoniec funguje je teda: $this->presenter->redirect(…)

http://mineto.sk/d/trace2.jpg

David Grudl
Nette Core | 8228
+
0
-

Mezi redirectem nad komponentou a presenterem je rozdíl, nad komponentou to má význam $this->redirect("komponenta:subkomponenta:signál"), tedy $this->redirect(„:Modul:Presenter:action“) skutečně nebude fungovat podle očekávání. Nicméně cyklit by to rozhodně nemělo, opravím to.

Spíš zvažuji, jestli je vůbec šťastné, že se pomocí $this->redirect("komponenta:subkomponenta:signál") dá adresovat. S příchodem ArrayAccess se totiž dá použít $this["komponenta"]["subkomponenta"]->redirect("signál") a původní zápis je tak spíš matoucí.