Component Builder / observer

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

Caute,

mam takyto problem:

Dajme tomu, ze mam kompomentu a ta patri pod urcity modul (Control, Form, …) a ma svoj zivotny cyklus. Ako priklad CoreModule\Components\LoginComponent. Moj problem je, ze chcem napisat FooModule\Components\LoginComponentHook (Hook tam je len ako priklad netusim ako by sa to malo volat) a v tom *Hook chcem reagovat na urcite signaly ktore posiela LoginComponent do sveta :). Vyjde mi tam cisty observer co je pohode. Pridam XyzModule so zavislostou na CoreModule a mam vymalovane… (aspon z casti)

Otazka na autorov Nelly, Kdyby :-)
Chcem sa ale spytat ako tieto pripady riesi Kdyby a Nella? Stacilo by mi len kratky popis, ci uz tieto pripady neriesili resp. ako ich vyriesili (ze by som to ukradol ked je to v mode teraz)

PS: nechcel som pisat cez Twitter ;-)

Dik moc

Filip Procházka
Moderator | 4668
+
0
-

Upřímně, moc jsem tě nepochopil, zkus to vysvětlit jinak :)

newPOPE
Člen | 648
+
0
-

Tak inak,

CoreModule\LoginComponent:

<?php
...
$this->context->observer->notify(new Signal('postLogin', $loginForm));
//a tu poslem signal do vesmiru
...
?>

PageModule\LoginComponentHook:

<?php

//tu na ten signal reagujem
public function onPostLogin($loginForm) {
	$model->saveData('...');
}

?>

‚Observer‘ je tam len kvoli examplu.

A este priklad slovne :-). Mam registracny formualr (meno, heslo) ktory zavola pred renderom signal ‚loginFormPreRender‘. A bez toho aby som cokolvek menil v configoch…, cize pozadujem len zapnutie modulu ktory bude obsahovat LoginFormHook->onLoginFormPreRender($form) kde ten formular este dokazem ovplyvnit pred vykreslenim. Cize zapnem modul mam funkcionalitu, vypnem modul funk. zmizne a nic sa nedeje. Zatial neberiem do uvahy zavilsti modulu na inych ani poradie spracovania hookov.

Editoval newPOPE (3. 2. 2012 17:25)

Filip Procházka
Moderator | 4668
+
0
-

Já bych to nazval technologickou onanií (já taky rád takhle onaniju, ale né vždy je to vhodné :).

David implementoval observer pattern už do Nette\Object a světe div se, ani na to nepotřebuješ další objekty, stačí ti callback :)

Editoval HosipLan (3. 2. 2012 18:10)

Aurielle
Člen | 1281
+
0
-

Tady jde o události/observer pattern napříč jednotlivými objekty, „observer“ by měl být něco jako globální kontejner událostí. Ale z vlastní zkušenosti je ho naroubovat do Nette dost těžké a musíš podědit hodně tříd a dost na to myslet, aby se to povedlo.

Hachik
Člen | 10
+
0
-

tak toto ma zaujalo. Aj sa ti to podarilo nejak vyriesit?

newPOPE
Člen | 648
+
0
-

Hachik napsal(a):

Ahoj, sem tam nad tym dumam vymyslam. potrebujem nazbierat use case-y aby som vyskusal ci to ma vobec zmysel.