$this->getSession(‚user‘) = Call to a member function getSection() on a non-object

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

No nazdar,
a prosím vás vysvetlite mi niekto čo sa deje.
Mám takýto kód, ktorý mi vyhadzuje chybu: Call to a member function getSection() on a non-object

...
	/** @var Nette\Http\Session|Nette\Http\SessionSection */
	private $userSesstion;


	public function __construct(Nette\Database\Context $database)
	{
		$this->database = $database;

		$this->userSesstion = $this->getSession('user');
		$this->template->userSesstion = $this->getSession('user');//userSesstion;
	}

Zdá sa že to nejako súvisí s umiestnením v konštruktore, ale nechápem ako.

Tabetha
Člen | 140
+
0
-

znamená to, že voláš funkciu getSection() na non-object. Ty by si to mal volať na SessionSection, čož vyzerá, že u teba neexistuje. Tento tvoj kód je asi nejaká komponenta alebo model nie?

Čamo
Člen | 798
+
0
-

Tabetha napsal(a):
Tento tvoj kód je asi nejaká komponenta alebo model nie?

Nie $this je presenter. Najčudnejšie je, že v jednom presentery mi to funguje a v druhom nie. Čumím do toho už od včera večera a nič.

David Matějka
Moderator | 6445
+
0
-

v konstruktoru nedelej nic krome predani tech zavislosti do properties tridy. Presenter v tu chvili neni ready. Akce provadej nejdrive ve startupu

protected function startup()
{
	parent::startup();
	//kod
}

a sablonu pln az v render metodach, pokud je to mozne (coz tady je)

Čamo
Člen | 798
+
0
-

Ma vystre. Som myslel, že normálne to bude fungovať ako toto:

class c
{
	public function __construct()
	{
		$this->hello();
	}

	private function hello()
	{
		echo 'hello';
	}
}

$c = new c();

No tak to dám do startup(). Ale že by som chápal, čo sa deje by som netvrdil. :(

David Matějka
Moderator | 6445
+
0
-

ano tohle fungovat bude – muj prispevek se vztahoval pouze k presenteru. Ale presenter se musi incializovat – zavolaji se injecty, spusti se run, inicializuji se parametry atd atd. a to v konstruktoru jeste neni. A od toho je tam metoda startup, kde je presenter jiz plne inicializovany

Editoval matej21 (3. 6. 2014 12:35)

Oli
Člen | 1215
+
0
-

Tohle jsi někdy viděl?

Čamo
Člen | 798
+
0
-

matej21:
Díky moc.

Oli:
Áno videl, ale nevidím tam nikde napísané, prečo mám tento problém.

Editoval Čamo (3. 6. 2014 13:01)