Session v modelech – Creating default object from empty value

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

Zdravím Vás,

mým cílem je rozchodit session v aplikaci tak, abych měl v modelu předka, který vytvoří k session přístup a jeho potomci si pak mohou u sebe už jen tvořit sekce a pracovat s nimi (v různých metodách je nastavovat, mazat atd…)

Zatím mám:

abstract class Base extends Nette\Object
{
	/** @var Nette\Database\Connection */
	protected $connection;

  /** @var Nette\DI\Container */
	protected $container;

	public function __construct(Nette\Database\Connection $connection, Nette\DI\Container $container)
	{
    $this->connection = $connection;
    $this->container = $container;
	}
}
class Potomek extends Base
/** @var Nette\Http\Session */
	private $session;

  private $sekce1;

  public function __construct(Nette\Database\Connection $connection, Nette\DI\Container $container, Nette\Http\Session $session)
	{
    parent::__construct($connection, $container);
    $this->session = $container->getByType('Nette\Http\Session');
    $this->sekce1 = $this->session->getSection('sekce1');
	}

public function metoda1($parametr){
        $sekce1->promenna1 = $parametr;
  }

Jenže to mi po zavolání „metoda1“ vyhodí Warning: Creating default object from empty value na řádku „$sekce1->promenna1 = $parametr“.
Jak správně pracovat se session v modelech?

Editoval Jarek92 (27. 12. 2014 9:58)

ali
Člen | 342
+
0
-
	/** @var session */
	private $session;

	public function __construct(Nette\Http\Session $session)
	{
		$this->session = $session;
	}

	public function example()
	{
		$example = $this->session->getSection("section");
		...
Jarek92
Člen | 91
+
0
-

Super, moc díky.

trejjam
Backer | 65
+
+1
-

Nevím jestli to je překlep, ale tohle v PHP fungovat nebude:

private $sekce1;
public function metoda1($parametr){
	$sekce1->promenna1 = $parametr;
}

Zkus to takhle, potom bude fungovat i původní myšlenka s vytvořením sekce v konstruktoru:

class base {
	protected $session;
	public function __construct(Nette\Http\Session $session) {
		$this->session = $session;
	}
}
class child extends base {
	private $sekce1;
	public function __construct(Nette\Http\Session $session) {
		parent::__construct($session);
		$this->sekce1 = $this->session->getSection('sekce1');
	}
	public function metoda1($parametr){
		$this->sekce1->promenna1 = $parametr;
	}
}
Jarek92
Člen | 91
+
0
-

Díky, vyzkouším :) Bude to lepší, protože nebudu muset při každé manipulaci se sekcí volat příkaz s tím getSection.

Fyasko
Člen | 106
+
0
-

Konečně jsem se pohl se sessions. Děkuju za jednoduché vysvětlení :)