Component Builder / observer
- newPOPE
- Člen | 648
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
- newPOPE
- Člen | 648
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
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)