Presmerovanie z komponenty
- timbulko
- Člen | 85
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(…)
- David Grudl
- Nette Core | 8228
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í.