Undefined variable: container chyba při použití session
- Petr9
- Člen | 32
Čau měl bych otázku chtěl bych na jedny strance vytvořit session
promenou ulozit do ni retezec a na druhy strance vypsat. Zkousel sem to pomoci
dokumentace ale uz na ty první mi hlasi chybu Undefined variable:
container,
Chci se zeptat kde a jak mam container definovat?
Nebo jak zprovozním session? nette 2,0.3
Kod první stránky
// $container je systémový kontejner
$session = $container->getService('session');
// nebo zkráceně:
$session = $container->session;
// v novém containeru je třeba samostatně startovat, jelikož není zapnutý autostart
if ($container->session->exists()) {
$session = $container->session->start();
}
// a získáme přístup do sekce 'myCounter':
$section = $session->getSection('Celkova');
$section->sesjedna = 'franta';
druha stránka
echo $section->sesjedna;
Díky
- Petr9
- Člen | 32
jo tak uz to nehlasi ze to neni definovany
ale ted to hlasí :Call to a member function getSection() on a non-object na tomto radku: $section = $session->getSection(‚Celkova‘);
v presenteru v metode startup mam
$container = $this->context;
// nebo zkráceně: $container je systémový kontejner
$session = $container->session;
// v novém containeru je třeba samostatně startovat, jelikož není zapnutý autostart
if ($container->session->exists()) {
$session = $container->session->start();
}
// a získáme přístup do sekce 'Celkova':
$section = $session->getSection('Celkova');
$section->sesjedna = 'franta';
echo $section->sesjedna;
- Melmen
- Člen | 132
$container = $this->context;
$session = $container->session;
$section = $session->getSection('Sekce');
$section->sesJedna = 'Franta';
dump($section->sesJedna);
Teď jsem to zkoušel, a funguje mi to takhle. Ten kód
if ($container->session->exists()) {
$session = $container->session->start();
}
Mám ale v Bootstrap.php nad
$container->application->run();
:)
EDIT:: Chybí tam vykřičník, správně je:
if( !$container->session->isStarted())
{
$container->session->start();
}
Editoval Melmen (29. 7. 2012 11:32)
- Petr9
- Člen | 32
22: aha dík jo kdyz odstraním if tak to funguje
melmen:
Jo kdyz tam dam
if ($container->session->exists()) {
$session = $container->session->start();
}
v bootstrap nad $container->application->run(); tak už to funguje. Co toto dela to nastartuje automaticky vsude session? v tom contejneru?
A jakej je rozdil mezi temato dvouma kody? ze v jednom to neprirazujes do $session, a v jednom volas exists a v druhym isStarted?
if ($container->session->exists()) {
$session = $container->session->start();
}
if( !$container->session->isStarted())
{
$container->session->start();
}
a potom kdyz chci tu session vypsat v jinym presenteru
Tak musím uvist pokazdy zase tento kod v kazdym presenteru?
$container = $this->context;
$session = $container->session;
$section = $session->getSection('Celkova');
Editoval Petr9 (29. 7. 2012 11:42)
- Melmen
- Člen | 132
Chybí ti tam vykřičník, musí tam být if( ! $container->session->exists())…
To nastartuje session, pokud neni nastartovana :-)
jj přesně tak. Nebo můžeš zkráceně psát
$session = $this->context->session;
a pak už $session
používáš.. $session->getSection....
Editoval Melmen (29. 7. 2012 11:44)
- Petr9
- Člen | 32
Ještě bych se chtel zeptat
když chcu nastavit pro sekci expiraci
a chci aby se zrusila pri zavreni prohlizece udelam to takhle?
$section->setExpiration(0);
A jestli jo, tak tento radek musim pridavat taky do kazyho presenteru kde budu pouzivat du sesion z teto sekce
( takze by pak muselo byt toto cele na kazdem presenteru?
$session = $this->context->session;
$section = $session->getSection(‚MySection‘);
$section->setExpiration(0);
)
Editoval Petr9 (31. 7. 2012 8:34)
- pecas
- Člen | 1
Ahoj s nette začínám a se sessionama jsem pár hodin bojoval, ale nakonec jsem poskládal následující pro mě funkční řešení. Tak jestli to někomu náhodou pomůže. verze nette 2.0.4 PHP 5.3
Do bootstrap.php startovací sekvence:
if(!$container->session->isStarted())
{$container->session->start();}
Do BasePresenter.php dvě metody:
public function setSess($name,$value)
{
$container = $this->context;
$session = $container->session;
$section = $session->getSection('All');
$section->$name = $value;
}
public function getSess($name)
{
$container = $this->context;
$session = $container->session;
$section = $session->getSection('All');
return $section->$name;
} ///konec public function getSess($name)
Tím pádem mohu tyhle metody volat ve všech presenterech a případně i ze šablon, například v default.phtml :
$presenter->setSess('email','nekdo@seznam.cz');
echo $presenter->getSess('email');
Editoval pecas (26. 8. 2012 10:54)