- GEpic
- Člen | 566
Ahoj, zkouším již delší dobu vytvořit jednu aplikaci, vše se mi daří a na to že využívám Nette cca 14 dní, se mi velice líbí a vše funguje jak má, kompletně celá aplikace, ale…
Aby při dalším psaní nedocházelo k zbytečnému opakování kodu, chtěl bych si rozšířit třídu User o nějaké metody, tedy využít původní třídu, ale extendovat jí o další metody, ale vůbec nevím jak na to.
Zkoušel jsem projet forum a vždy jsem odpověd našel, ale nyní ne a nepřišel jsem vůbec jak na to. Zkoušel jsem různé fígle přes registraci třídy v config.neon přes service: user: <třída>, ale taky bez úspěchu.
Potřeboval bych tedy přesný návod, co je potřeba dodržet při extendování třídy Nette\Security\User, nikde jsem bohužel odpověd nenašel a nejsem žádný hvězdný programátor. Díky za případný rychlý brief.
Hodně zdaru! :)
PS: Dokumentace mi toho také moc nedala, prostě jsem to nepochopil, třeba budu mít štěstí nyní. :)
Editoval GEpic (28. 12. 2015 23:51)
- GEpic
- Člen | 566
Nemusím jí nutně rozšiřovat, chtěl bych pouze využívat jako doposud $this->user ale třeba s funkcí $this->user->getAvatar() nebo získávat ostatní informace o daném právě přihlášeném uživateli. Pokud existuje jiný, pohodlný způsob, budu jedině rád. Chci aby se tyto informace načetli při vytvoření instance třídy a pak údaje popřípadě měnit, jako třeba email uživatele, heslo, telefonní číslo, apod. Doposud to řeším tak, že mám v každém formuláři přímo dotaz na databázi, ale nepřijde mi to pohodlné, jelikož informace o uživateli získávám docela často na více místech, nebo je nastavuji.
Editoval GEpic (29. 12. 2015 1:22)
- iNviNho
- Člen | 352
No napadli ma 2 možnosti:
A
Vytvoriť si triedu (napr.) MyUser a v nej si vyžiadať triedu Nette\Security\User
To ti umožní používať všetko čo má táto trieda a môžeš si do nej napísať čo len chceš :)
B
Naozaj extendovať túto triedu.
Pripomeniem, že v configu som ešte ťukol
EDIT: Možnosť A som používal, možnosť B používam
Editoval iNviNho (5. 1. 2016 18:31)
- GEpic
- Člen | 566
Díky moc iNviNho
Tak jednoduché a mě to pořád nešlo, víc jsem nepotřeboval, jen jak to použít v konfigu a jak extendovat Usera.
Ještě jednou díky moc! :)
PS: Jen tak letmo když na to koukám.. při extendování třída user
zůstane stejná, bude se volat stejně (tedy
$this->getUser()
, kde getUser()
mi vrátí instanci
mé třídy? Pouze bude obsahovat nové funkce, které přidám apod. že?
Editoval GEpic (5. 1. 2016 20:08)
- iNviNho
- Člen | 352
GEpic napsal(a):
Díky moc iNviNho
Tak jednoduché a mě to pořád nešlo, víc jsem nepotřeboval, jen jak to použít v konfigu a jak extendovat Usera.
Ještě jednou díky moc! :)
PS: Jen tak letmo když na to koukám.. při extendování třída user zůstane stejná, bude se volat stejně (tedy
$this->getUser()
, kdegetUser()
mi vrátí instanci mé třídy? Pouze bude obsahovat nové funkce, které přidám apod. že?
Za málo :)
Jasné :) Ak by si chcel aby metoda getUser() robila niečo iné, tak si ju iba preťažíš v novej triede. Inak ak do tej triedy nenapíšeš nič, tak vlastne tvoja trieda bude to isté čo Nette\Security\User …
Ja som si prepísal tú metodu, pretože chcem aby mi vracal entitu Usera a vždy mám aktuálne data z DB (používam Doctrine 2 ORM)
Editoval iNviNho (5. 1. 2016 21:47)
- GEpic
- Člen | 566
Aurielle napsal(a):
->getUser()
a->user
jsou ekvivalentní.
Díky moc, ted už vím opravdu vše a naprosto jak se věci mají, projel jsem si i samotné Nette co vrací a potvrdil jsi mi to.
PS: Jen další dotaz, (extend už mi funguje), aby po zalogování
uživatele se načetli hodnoty do proměnných z databáze, abych je nemusel
při každém volání tahat znovu? Spíš, nevím přesně, jak využít
událost $onLoggedIn
…
Co říkáte na toto řešení? Popř. jak by jste řešili get a set z / do databáze vy?
Editoval GEpic (6. 1. 2016 3:04)
- F.Vesely
- Člen | 369
Pro Doctrine existuje Majkl578/nette-identity-doctrine, ktere ti hodi do Identity rovnou Entitu. Prijde mi to lepsi, nez to mit vsechno v Nette\Security\User, protoze se ti do aplikace muzou prihlasit napriklad Admin, Dealer, Customer a kazdej bude mit jina data, jak to pak nacpes vsechno do Nette\Security\User?
- GEpic
- Člen | 566
F.Vesely napsal(a):
Pro Doctrine existuje Majkl578/nette-identity-doctrine, ktere ti hodi do Identity rovnou Entitu. Prijde mi to lepsi, nez to mit vsechno v Nette\Security\User, protoze se ti do aplikace muzou prihlasit napriklad Admin, Dealer, Customer a kazdej bude mit jina data, jak to pak nacpes vsechno do Nette\Security\User?
To se mi taky moc líbí. PS abych zodpověděl tvou otázku, jde pak už o samotný návrh aplikace, kde v tomto případě to není potřeba a samozřejmě chápu že situace a data mohou být různá. Záleží pak na samotném navržení databáze. Každopádně, využíváš doctrine2nette taky?