Časová zóna podla uživateľského nastavenia a reload identity
- burisk
- Člen | 6
Caute,
Ako by ste riešili tento problém? V nette som ešte taký „lepší
začiatočník“, takže sa učím,
a hladám efektívnejší spôsob ako meniť časovú
zónu.
Momentálne to riešim cez BasePresenter ale keďže mám
kopu modulov, je nepohodlné mať všade rovnaký kód.
(timezone je zapísaná v Identity uživatela ktorá je
načítavaná z DB)
Je niečo efektívnejšie? Alebo to pôjde len cez BasePresenter každého modulu?
(ešte tak trocha mimo temy, ako by sa dal dosiahnuť reload identity z db? [cez jednorazove volanie funkcie])
Vďaka :)
- Michal Vyšinský
- Člen | 608
Ahoj,
na reload identity používám něco takového (v presenteru):
public function relogin() {
if ($this->user->isLoggedIn()) {
$id = $this->user->getId();
$user = $this->loadUser($id);
if (!$user) {
// pro případ, že by byl uživatel náhodou už smazaný
$this->user->logout(TRUE);
return;
}
$identity = new \Nette\Security\Identity($id, $user->getRoles(), $user->getData());
$this->user->getStorage()->setIdentity($identity);
}
}
$user je u mě Doctrine 2 entita, metoda getRoles() vrací seznam rolí, metoda getData() vrací pole dat, které chci dát identitě.
Jinak timezone bych nastavoval ve startupu pokud je uživatel přihlášený. A myslím, že ty BasePresentery modulů by měly dědit nějaký univerzální BasePresenter, tak budeš moci mít nastavování timezone jen v tom jednom presenteru.
Editoval CherryBoss (16. 7. 2013 15:07)