Komponenta sa vytvara pred volanim metody startup v presenteri
- sabrx
- Člen | 47
Ahoj, narazil som na celkom závažný problém, keď mám komponentu v presenteri, ktorý je prístupný len prihláseným užívateľom V metóde startup si jednoducho overím, či je užívateľ prihlásený a ak nie, presmerujem ho preč.
Táto komponenta je závislá na identite užívateľa, takže keď príde neprihlásený užívateľ, vôbec by sa nemala vďaka startup metóde v presenteri vytvoriť. Tu som sa dočítal, že vytváranie komponenty je nezávislé od flow presentera, takže startup tomu nezabráni.
Moja otázka je, ako preniesť metódu startup presentera aj do procesu vytvárania komponenty, prípadne iný spôsob, ako tento problém ošetriť, vďaka za pomoc.
- sabrx
- Člen | 47
Myslel som si to tiež, ale podľa vzniknutej chyby to tak asi nebude.
Takže mám SecuredPresenter, v ktorom mám túto metódu startup:
protected function startup() {
parent::startup();
if (!$this->getUser()->isLoggedIn()) {
$this->redirect('Signin:');
}
$this->lang = null; // stored in session for signed users
}
Potom mám TaskPresenter (dedí od SecuredPresenter), a v ňom túto metódu:
protected function startup() {
parent::startup();
// ďalší kód
}
Mám tu takisto zmieňovanú komponentu:
protected function createComponentTaskList() {
return new TaskList($this->taskList, $this->tasklistModel, $this->taskModel, $this->displayList);
}
Komponentu potom vykreslujem v šablóne k jednej z akcií TaskPresenter, lenže tá by vôbec nemala nastať, keď je užívateľ odhlásený. Myslel som si, že komponenta sa vytvára až vo chvíli, keď na ňu Nette narazí pri renderovaní šablóny.
- ViPEr*CZ*
- Člen | 817
sabrx napsal(a):
Jan Endel napsal(a):
Klikatelná laděna by byla mnohem lepší ;).
Dufam, ze staci takto
Jsme pohodlný… nestačí. To vypadá, že se někde pokoušíte přistoupit k té komponentě. V té laděnce by to mohlo být vidět, když se prokliká kude se to dostane k volání té továrny komponenty. ;-)
- sabrx
- Člen | 47
@Schmutzka: vdaka, rychle a pohodlne, tu je odkaz: http://ladenka.juzna.cz/…a7c29cdb459d
ViPEr*CZ: ked sa subor otvori v prehliadaci ako stranka, da sa tam klikat, je to to iste ako vyssie uvedeny odkaz. Ak som vas nepochopil, prosim objasnite.
Editoval sabrx (10. 4. 2013 20:51)
- David Matějka
- Moderator | 6445
problem je v tom, ze uzivatel chtel provest nejakou akci v komponente
(taskList-markUndone). najednou ale nebyl prihlasen, coz zjistil
SecuredPresenter a presmeroval uzivatele na prihlaseni. nette pri redirectu
uklada stav komponent a kvuli tomu ji inicializuje. nedavno jsem se tim setkal,
ale nevim, jestli jsem to vubec nejak resil. ted me napada tohle:
v SecuredPresenter jak mas $this->redirect('Signin:');
zkus dat
misto toho
$this->redirectUrl($this->link("Signin:"));
pri $this->link() by se totiz stav pres saveGlobalState ukladat nemel a tudiz by nemelo dojit k vytvoreni komponenty