Zjisteni aktualniho presentru, akce a signalu
- saimons
- Člen | 293
Mam takovy problem, chtel bych do DB ukladat neco jako logy od prihlasenych uzivatelu. A chtel bych vedet kde vsude se pohybuji. Do BasePresenteru jsem si dal neco takoveho:
<?php
$baseModel->setLog($this->getName(), $this->getAction(), $this->getSignal());
?>
Ale getSignal() mi nic nevraci ani v pripade kdyz zpracovavam signal na mazani polozek nebo na zpracovani formulare. Jedna se mi o to co je v url ?do=… . Jestli by to melo fungovat, tak jeste doplnim, ze ty pozadavky jak na mazani tak na zpracovani formulare, jsou posilany pres AJAX.
- Mikulas Dite
- Člen | 756
Použil bych info z routeru, resp. requestu: inspirace třeba v https://github.com/….panel.phtml#L100. A logování bude nejlepší v eventu shutdown, kde máš jistotu, že nebude další přesměrování (pokuď chceš logovat i to, tak to samozřejmě bude lepší jinde :).
Editoval Mikulas Dite (15. 9. 2011 19:51)
- uestla
- Backer | 799
Je ta metoda vubec na to co ja chci?
Je, pokud tedy chceš zjišťovat, na který signál uživatel došel.
Problém ale bude v tom beforeRender()
, jak píšeš. Protože
signál se hned po zpracování (což je mezi
action<View>()
a render<View>()
) maže.
Řešením by mohlo být jak psal Mikulas (s tím, že bych
si hnidopišsky dovolil poupravit odkaz na vhodnější
řádek), nebo logování přesunout do startup
u.
- saimons
- Člen | 293
Diky moc, uz to funguje tak jak jsem si predstavoval. Kdyby nekdo potreboval:
<?php
use Nette\Environment,
Nette\Application\UI\Presenter,
Nette\Http\User;
abstract class BasePresenter extends Presenter {
protected function beforeRender()
{
$user = Environment::getUser();
if($user->isLoggedIn()) {
$baseModel = new BaseModel();
$baseModel->setLog($this->getName(), $this->getAction(), isset($this->request->params[Presenter::SIGNAL_KEY]) ? $this->request->params[Presenter::SIGNAL_KEY] : NULL );
}
}
}
?>