jak zavolat metodu u user
- joseff
- Člen | 233
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
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
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
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
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
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)