Zjisteni aktualniho presentru, akce a signalu

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

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.

uestla
Backer | 799
+
0
-

Tvrzení, že „nic nevrací“, je dle mých očí nesprávné – vrací NULL nebo array?

saimons
Člen | 293
+
0
-

Tak jsem na to jeste chvilku koukal a vraci mi to NULL. Pokazde, zkousel jsem i vypnout ajax. Je ta metoda vubec na to co ja chci? Mam to v beforeRender().

Mikulas Dite
Člen | 756
+
0
-

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
+
0
-

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 startupu.

saimons
Člen | 293
+
0
-

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 );
        }
    }

}
?>