Spuštění Session v bootstrapu

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

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

Díky, tohle je asi docela schůdná varianta. Pořád ale nechápu, proč nefunguje inicializace v bootstrapu :S

Vitek Jezek
hledá kolegy | 285
+
0
-

protoze v bootstrapu si ji stvoris mimo jakykoliv objekt?

Mikulas Dite
Člen | 756
+
0
-

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
+
0
-

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.

Mikulas Dite
Člen | 756
+
0
-

Áha, díky za osvětlení. Takže globální nepoužívat, chápu ;)

Tomik
Nette Evangelist | 485
+
0
-