Vytvoření session komponenty

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

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

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.

CZechBoY
Člen | 3608
+
0
-

Co metody loadState a saveState? Nemuzes je pouzit?

kleinpetr
Člen | 480
+
0
-

@h4kuna Díky za info :)

@CZechBoY V jakém smyslu ? Pro to porovnávání session se členskými proměnnými ? nebo s použitím persistence ?

CZechBoY
Člen | 3608
+
0
-

Místo použití session (stejně se to načítá a ukládá do session).
Ty členský proměnný nijak neupravuješ ne? Jen přes handle požadavky.

kleinpetr
Člen | 480
+
0
-

Teď úplně nevím jak to myslíš. Samozřejmě ty členský proměnný pouze v handle, ale jde mi spíš o to je tam mít z hlediska návrhu a když se k tomu jednou vrátim, tak aby bylo zřejmý co vše model/komponenta obsahuje.

kleinpetr
Člen | 480
+
0
-

@CZechBoY můžeš to rozvést, to s metodami load a saveState ? Díky :)