Získání přístupu k session

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

Zdravím všechny.

Zápasím tady se zprovozněním sessions a už si vůbec nevím rady. Používám Nette 2.1. Zkouším udělat košík. Vytvořil jsem si třidu Basket. V construktoru BasePresenteru z ní vytvářím objekt a chci mu předat session.
Ale když se session snažím získat

$session = $this->getSession('basket');

, tak mi to hází chybu Call to a member function getSection() on a non-object .

Už jsem něco se session zkoušel v DEV vezri 2.1. a tam jsem to takhle získával pro předání komponentě v továrničce a to mi šlo. Vůbec nemůžu přijít na to, v čem je rozdíl.

Díky za radu.

David Matějka
Moderator | 6445
+
0
-

kde volas to $this->getSession()? to vypada, ze nekde mimo objekt.

kratce, jak by to mohlo vypadat spravne:

trida basket:

class Basket
{
	/** \Nette\Http\SessionSection */
	protected $sessionSection;

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

tu registruj jako sluzbu v neonu:

services:
	basket: Basket

format je nazevSluzby: Trida, nazev sluzby neni dulezity, trida musi byt vcetne namespace

v base presenteru si pak tu sluzbu injectni

class BasePresenter extends UI\Presenter
{
	/** @var Basket */
	protected $basket;

	public function injectBasket(Basket $basket)
	{
		$this->basket = $basket;
	}
}

v novym nette by mel fungovat tento zkraceny zapis:

class BasePresenter extends UI\Presenter
{
	/** @var Basket @inject */
	public $basket;
}
kejlicz
Člen | 201
+
0
-

Aha, to byde asi moje slabá znalost OOP. Volal jsem to(jak jsem psal i v příspěvku) v construktoru BasePresenteru. Takže to nešlo, protože vlastně ještě nebyl BasePresenter celý vytvořený?

Jdu zkoušet Tvoje řešení.

Díky

David Matějka
Moderator | 6445
+
0
-

v konstruktoru presenteru toho delej co nejmin – do presenteru jeste nejsou dodane vsechny zavislosti.. pouzij radeji metodu startup(), kde uz je presenter inicializovany…

ale to reseni, jak jsem psal, je lepsi ;)