Získání přístupu k session
- kejlicz
- Člen | 201
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
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;
}
- David Matějka
- Moderator | 6445
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 ;)