Spuštění Session v bootstrapu
- Mikulas Dite
- Člen | 756
Ahoj, dostal jsem se na další zádrhel :S
Potřebuji rozchodit session, volám getSession v bootstrapu a v presenteru
chci data číst. Když dám ukázkový kód z https://doc.nette.org/…ttp/sessions
(view counter) do bootstrapu celý, tak pochopitelně funguje. Když dám ale
$namespace->count do presenteru, tak nevrací ani chybu, ani správné
číslo, ale null. Musím tedy místo volání getSession na globální objekt
(který by měl být vidět i v presenteru, ne?) spustit na nějakou
proměnnou z presenteru? Těch ale používám několik, takže to se bych
dělal nerad.
Napište mi prosím nějaký příklad inicializace objektu session tak aby byl
vidět ve všech presenterech.
Díky
- Tomik
- Nette Evangelist | 485
Do bootstrapu patří pouze
<?php
$session = Environment::getSession();
// případně nějaké nastavení
$session->setExpiration('+ 14 days');
if (!$session->isStarted()) $session->start();
?>
a v preseneteru je nutné volat sessions takto:
<?php
$namespace = Environment::getSession('counter');
echo $namespace->counter;
?>
…
- Mikulas Dite
- Člen | 756
Díky, ale přesně to je můj problém, nechci v každý části presenteru tvořit znova objekt namespace. Nedá se jednoduše tahle část napsat i jinak?
- Vitek Jezek
- hledá kolegy | 285
co treba
<?php
echo Environment::getSession('counter')->counter;
?>
? ; ) Stale malo?
Popr. si to muzes hodit v startupu nejakeho basePresenteru do promene.
- Mikulas Dite
- Člen | 756
Díky, tohle je asi docela schůdná varianta. Pořád ale nechápu, proč nefunguje inicializace v bootstrapu :S
- Mikulas Dite
- Člen | 756
Tak to ano, ale je to globální proměnná a ta je při deklaraci nad třídama vidět všude, nebo právě že není?
- Tomik
- Nette Evangelist | 485
Nejedná se o znovuvytvoření. Jedná se o tzv. singleton (to je návrhový vzor, pokud neznáš, gůgli).
Ty jej v bootstrapu vytvoříš, nastavíš.
A poté jej vždy jen voláš. Kdyby ta proměnná byla globálně dostupná, byla by to chyba návrhu (jednoduše řečeno, globální proměnné jsou prasárny), tudíž proto je použit ten getter.