jak zavolat metodu u user

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

Dobrý den, není mi jasné jak mohu volat klasické metody ,ktere jsem si vytvoril v userModelu. Myslel jsem ze kdyz si v tomto modeulu vytvorim metodu:

public function vratPet()
{
    return 5;
}

tak ze ji mohu zavolat takto:

$cislo = Environment::getUser()->vratPet();

Ale to bohuzel nejde. Poradi mi nekdo prosim?

22
Člen | 1478
+
0
-

Nemůžeš přeci volat metodu modelu bez instance té třídy:

protected $model;

public function getModel()
{
	if(!isset($this->model) $this->model = new CisloModel();
	return $this->model;
}
...

$cislo = $this->model->vratPet(); //$cislo = 5

nějak takto z hlavy třeba…

sry, blbe jsem si precetl zacatek..

$this->userModel->vratPet();

by mělo fungovat..pošli když tak chybu, co to hlásí…

Editoval 22 (24. 3. 2011 9:59)

joseff
Člen | 233
+
0
-

No hlásí to že metoda neexistuje.

Call to undefined method Nette\Web\User::vratPet()

Ja totiz nejak nechapu jak je to s tim uzivatelem presne. Overovani probyha v UsersModel a tam je a taky moje metoda vratPet(), ale Environment vraci objekt Nette\Web\User coz je jiny objekt. Takze chape to nekdo?

OK3
Člen | 91
+
0
-

Nebo můžeš volat metodu „staticky“, já to požívám na helper funkce, které nutně nepotřebují instanci třídy.

Model:

<?php
class User {
	public static function vratPet() {
		return 5;
	}
}
?>

V presenteru nebo někde jinde:

<?php
$pet  = User::vratPet();
?>

Pokud to voláš přes Environment::getUser() tak myslím, že ti třída User (model) musí implementovat rozhraní IAuthenticator (kdyžtak mě opravte).

22
Člen | 1478
+
0
-

joseff napsal(a):

No hlásí to že metoda neexistuje.

Call to undefined method Nette\Web\User::vratPet()

Ja totiz nejak nechapu jak je to s tim uzivatelem presne. Overovani probyha v UsersModel a tam je a taky moje metoda vratPet(), ale Environment vraci objekt Nette\Web\User coz je jiny objekt. Takze chape to nekdo?

No píšeš to správně..User je jiný objekt, tedy nemá přístup k metodě vratPet(), ale implementuje rozhrani IAuthenticator a v configu říkáš akorát, že to umí obsloužit třída UserModel viz.: Nette\Security\IAuthenticator: UsersModel
O vratPet() tam neni ani zminka, a třída Usera žádnou takovou metodu nemá :-)

Jod
Člen | 701
+
0
-

Ak to máš ako authenticator, tak toto ti pôjde:

\Nette\Environment::getUser()->getAuthenticationHandler()->vratPet();

Keď chceš volať metódu priamo u User tak musíš použiť extension method .

Editoval Jod (24. 3. 2011 12:33)

jtousek
Člen | 951
+
0
-

Nepomohlo by tohle?

config.ini:

service.Nette-Web-IUser = Model\User

EDIT: Tedy za předpokladu že ten model dědí Nette\Web\User.

Editoval jtousek (24. 3. 2011 13:12)