Události – onStartup, onNewRequest, …

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

Už to bude nějaký ten pátek, co mě PHP tak naštvalo, že jsem s ním rezolutně skoncoval… Tuším, že se psal rok 2002 a verze 4.3 byla na spadnutí (ze židle) :)

Po očku jsem ale poslední dobou pokukoval po Nette a nakonec jsem se ho přecejen rozhodl prozkoumat. Samozřejmě čumím jak puk, a tak bych byl rád, kdyby mi někdo pomohl vysvětlit pár nejasností.

Jde mi o události a callback jejich handlerů – konkrétně v Application.php na řádku 133:

130: try {
131:     if (!$request) {
132:         // Routing
133:         $this->onStartup($this);
134:
135:         $request = $router->match($httpRequest);
136:         if (!($request instanceof ....

Uměl by mi, prosím, někdo polopaticky vysvětlit, co se ve skutečnosti zavolá? Chápu, že se událost vyvolá, ale nechápu, co ji v tomto případě zpracuje…

Díky.

Pavel

pmg
Člen | 372
+
0
-

Ahoj Pavle,

napřed aplikace pomocí routeru zjistí, na jaký presenter požadavek směřuje, a následně u něj v několika fázích volá různé metody.

Doporučuji se kouknout na příklady v distribuci, popř. prostudovat životní cyklus aplikace.

Víťa

David Grudl
Nette Core | 8218
+
0
-

Jde o vlastnost Nette\Object, kdy mohu do pole $this->onXyz přidávat „callbacky“ a poté je hromadně zavolat přes $this->onXyz($arg, ...).

Příklad:

$application->onStartup[] = 'myfunc';
$application->onStartup[] = array($object, 'method');

$application->onStartup(TRUE, 123);  // volá myfunc(TRUE, 123) a $object->method(TRUE, 123);
pheidrich
Člen | 11
+
0
-

Díky, Object::__call($name, $args) a lambda funkce jsem si pročítal už včera, ale v hlavě se mi to rozleželo až přes noc… ;-)

Jdu prozkoumat, kde přesně si vlastně Presenter ty handlery registruje.

p.s.: Davide, ty pracuješ – teda spíš odpovídáš na blbé dotazy – už ve 4:44 ráno? :-)

Tomik
Nette Evangelist | 485
+
0
-

pheidrich napsal(a):

p.s.: Davide, ty pracuješ – teda spíš odpovídáš na blbé dotazy – už ve 4:44 ráno? :-)

Řekl bych, že David ještě pracuje.. :)