Vytvoření session komponenty
- kleinpetr
- Člen | 480
Zdravím,
snažím se přijít na vhodný způsob práce se session v komponentě.
Příklad:
TestControl extends Control
{
private $x;
private $y;
private $z;
public function handleChangeX($X){
$this->x = $x;
}
...
}
Zkrátka nastavování nějakých properties. Jde mi o to jak ideálně uchovávat nastavená properties, buďto persistence, ale do toho se mi moc nechce, jelikož při ajaxu se url nezmění, takže je mi to k ničemu a nebo klasickou session takhle:
TestControl extends Control
{
private $properties;
public function __construct(Session $session){
parent::__construct();
$this->properties = $session->getSection('test_properties');
}
public function handleChangeX($x){
$this->properties->x = $x;
}
}
Tohle by sice šlo, ale nelíbí se mi, že properties nejsou zpočátku definované a obecně je to jen pole, kde oproti členské proměnné není jisté, že bude hodnota existovat, apod.
Řeším tohle celkem často, jak to řešíte vy ? Napadlo mě něco jako v render metodě porovnávat členské proměnné a ukládat do sessiony nebo něco na způsob beforeRender(), který ale komponenta nemá.
Budu rád za všechny tipy :)
- h4kuna
- Backer | 740
Pokud se to hodí můžeš si vyrobit vlastní SessionStorage. Druhá varianta co popisuješ je ok na malý věci. Jen bych definici section přesunul do konfiguráku.
services:
- Foo(@session::getSection('test'))
<?php
use Nette\Http;
class Foo
{
/** @var Http\SessionSection */
private $sessionSection;
public function __construct(Http\SessionSection $sessionSection)
{
$this->sessionSection = $sessionSection;
}
public function getSystem()
{
return $this->sessionSection->system;
}
public function setSystem($system)
{
$this->sessionSection->system = $system;
}
}
?>
Pokud vlastnost v session neexistuje vrací NULL.