Předávání objektu mezi dvěma formuláři

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

Zdravím,

už delší dobu řeším problémy s předáváním argumentů komponentám nebo mezi nimi. Vždycky jsem to nějak obešel, např. předáním id v šabloně do hidden pole a poté znovuvyčtením z db apod., ale teď jsem narazil na problém který takto vyřešit nejde.

Mám několik formulářů, které uživatel postupně prochází. Je to takový wizard. Všechny formuláře se vytváří v továrničkách v jednom presenteru, který má zároveň i metody pro render jednotlivých šablon a metody pro zpracování formulářů. Na konci každé této metody je redirect na další krok. Nemám žádnou databázi, výsledná data se vrátí jako soubor.

Mám objekt do kterého potřebuji postupně ukládat zadaná data z jednotlivých formulářů. Problém je v tom, že si potřebuji tento objekt postupně předávat mezi jednotlivými render metodami a obslužnými metodami pro formuláře.

Napadlo mě si objekt vytvořit v konstruktoru presenteru a pak ho volat pomocí $this->object, nicméně po vyzkoušení vidím že po každém redirectu nebo zavolání callbacku z formuláře se presenter instancuje znovu a tudíž se ztratí data v objektu zadaná.

Je nějaká možnost si mezi komponentou ↔ render metodou ↔ zpracováním formuláře předávat jeden a ten samý objekt?

EDIT: ještě dodám že bych se rád vyhnul contextu nebo sessions. Pokud nebude jiná možnost, budu je muset použít, nicméně až jako poslední možnost…

Předem díky za odpovědi!

Editoval j0hny (24. 9. 2013 16:16)

xificurk
Člen | 121
+
0
-

Proč se chceš vyhnout sessions? To, co popisuješ vypadá jako přesně případ pro jejich využití.

mkoubik
Člen | 728
+
0
-

Sessions mají tu „nevýhodu“, že jsou stejné pro všechny otevřené taby. Pokud chceš mít možnost mít v každém tabu wizard v jiném stavu, tak použij persistentní parametry. V případě složitějšího objektu si ho ulož do session pod nějakým náhodným klíčem a teprve ten klíč si ulož do persistentního parametru.

j0hny
Člen | 33
+
0
-

Omlouvám se za pozdní odpověď, neměl jsem teď chvíly přístup k netu.

Není třeba aby byl wizard optimalizovaný pro práci s více ‚instancemi‘ v tabech, takže tohle můj problém není. Sessions se chci vyhnout jen z důvodu toho že pracuji pouze s jedním presenterem kde jsou všechny stránky a práce se session mi připadá proti jednoduchému předávání objektu v argumentech poněkud neohrabaná. Především mi tedy jde o to se naučit další způsoby a psát co nejčistší kód, ale pokud to tedy jinak nejde, použiju session.

Díky moc za odpovědi!