Jeden z presenterů nezobrazí flashMessage

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

Ahoj,
na jednom z presenterů se mi po redirectu nezobrazí flashMessage, jakmile redirectnu jinam (na jiný presenter), vše se zobrazuje správně.
Jsem si téměř jistý, že to ovliňuje daný presenter, který je však největší v celé aplikaci. Nemá někdo myšlenku která metoda by mohla ovlivňovat následné vykreslení message (všechny mé presentery dědí z BasePresenteru, kde přepisuji třeba startup, nicméně žádnému dalšímu presenteru to nevadí – dále v tomto presenteru už mám snad jenom několik metod render<Action> a pár createComponent<Component> ). Nebo by to mohlo být tím že v tomto presenteru si vytahuji nějaká data ze session? Vůbec nevím kde začít debbugovat, přece jen se považuji spíš za začátečníka v nette. Tedy hledám něco jako „životní cyklus flashMessage“?
Děkuji za nápady

Editoval argosovo (25. 11. 2015 22:39)

Šaman
Člen | 2666
+
0
-

Session by to být mohlo jen pokud někde kompletně celé session resetuješ, nebo promažeš cookies. Flashmessages se v session přenáší.
Pak by to mohla být přepsaná metoda flashMessage() (ta se dědí z Control), hasFlashSession( ), nebo getFlashSession( ).
Taky by to mohlo být zahození _fid v URL, protože podle něho se ta flashmessage v session hledá.
Ale nejčastěji to bývá problém šablony, která prostě FM nevykresluje. Zkontroluj si nejprve jestli ti ta FM dojde do šablony (dumpni si proměnnou $flashes).

argosovo
Člen | 54
+
+1
-

Tak a mám tu vítěze problému:
v injectUsersModels() nesmíte ukládat do template (injectnul jsem cache a hned z ní vytáhl hodnoty do template, protože „když už tam byla ta cache“). Vše fungovalo bez problému až na výše zmíněné flashMessage, kterých jsem si však všimnul s notným spožděním a nyní mi to zabralo několik hodin hledání, jelikož jsem nevěděl která část scriptu způsobuje problém.
Tak třeba to jednou někomu pomůže.

argosovo
Člen | 54
+
0
-

Šaman: děkuji za zájem a pomoc… moje začátečnické „debugování“ spočívalo nakonec ve:

  1. Vytvoření render v daném presenteru který nedělá nic jiného než nastaví flashMessage a redirectne
  2. Vytvoření render ve stejném presenteru, který nedělá nic jen je na něj redirectnuto a má zobrazit flashMessage:
<?php

    public function renderFlash(){
        $this->flashMessage("flash");
        $this->redirect("PresenterSChybou:zobrazit");
    }
    public function renderZobrazit(){
        $this->setView("default");
    }
?>

3. Když jsem si ověřil, že i při prázdné render se flashMessage nezobrazí, prošel jsem celý presenter a hledal metody které by mohly ovlivňovat prázdný render… byly tam asi dvě z toho jedna injectUsersModels()
4. zakomentovával jsem různé části kódu v injectUsersModels() až se konečně zobrazila flash message… → viz. předchozí příspěvek :)

Ale opravdu děkuji za snahu, na forum jsem psal po několika hodinách snažení, ale paradoxně mi to pomohlo utřídit myšlenky a sám přijít na problém :)

Šaman
Člen | 2666
+
+1
-

Jo, to se mi taky stává, že se snažím popsat problém a během psaní se mi to ujasní natolik, že problém vyřeším :)

Ale docela by mě zajímalo, cos měl v té metodě injectUsersModels(). Obecně by se ale v inject metodách nic moc dělat nemělo, jsou to vlastně jen opožděné konstruktory určené k nastavení závislostí.