použití metody getuser v konstruktoru komponenty

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

Zdravím všechny,

Řeším jeden asi základní problém.

Když vytvářím komponetu potřebuji zjistit jestli je uživatel přihlášen. Když použiji:

class PocmpForm extends UI\Control
{


    function __construct(DibiConnection $connection)
    {
	$user = $this->presenter->getUser();
	.
	.
	if ($user->isLoggedIn()):
	.
	.

vrátí mi to chybovou hlášku:
Component '' is not attached to ‚Nette\Application\UI\Presenter‘

což je asi přirozené. Ale jak se k tomu uživateli dostat?

Díky.

Editoval pernip01 (28. 3. 2012 21:09)

wopice
Člen | 21
+
0
-

Před voláním $this->presenter->getUser() zavolej parent::construct();

llook
Člen | 407
+
0
-

To nepomůže, pokud si nadřazený prvek nepřipojuje sám, tak se připojí až po provedení konstruktoru. Řešením by bylo připojit ten nadřazený prvek (tj. obvykle konstruktor):

public function __construct(IContainer $parent, $name, DibiConnection $conection)
{
	parent::__construct($parent, $name);
	// ...
}
Aurielle
Člen | 1281
+
0
-

Řeš tuto logiku až po připojení k presenteru, tj. v metodě attached().

protected function attached($obj)
{
	if($obj instanceof Nette\Application\UI\Presenter)
	{
		$user = $this->presenter->context->user;
		// ...
	}
}
Jan Endel
Člen | 1016
+
0
-

Ovšem i v attached je zapotřebí zavolat parent::attached($obj);.