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 | 8285
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í.