EventBroadcaster v PHP, Nette – má to smysl?

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

Zdravím, hraji si s Nette už pár měsíců. A co říct úvodem jsem uchvácen :)

Nejsem zrovna kovaný PHP programátor, mojí doménou je spíše ActionScript. Zajímal by mě váš názor na smysluplnost využítí EventBroadcasteru respektive návrhového vzoru Observer v PHP potažmo v Nette…
Takhle třeba vypadá implemetace EventBroadcastru v mém oblíbeném AS3 frameworku LowRa

Proč vlastně? Vezmu li si třeba situaci kdy mám model Pages a chci reagovat nějakým způsobem na přidávání nových stránek např. odesláním mailové notifikace.

Tak mě v tuto chvíli napadly dvě možnosti

  1. přidat do modelu odeslání mailu přímo ve metodě která přidává stránky – což mi nepříjde zrovna šťastné řešení
  2. přidat odeslání do presenteru do metody která článek odesílá tzn. do submitu formuláře

Ale v případě že bych chtěl k mailové notifikaci přidat třeba ještě logování přídávání článku atd. Nebo třeba stránku před uložením nějakým způsobem modifikovat..

První co mě napadlo je řešit to ve stylu Drupalu který využívá hooks.

Ale přišlo mi že řešení pomocí signalů/eventu a Observeru by to možná bylo štastnější a více objektové.
Vpodstatě model nebo presenter by vyvolali údálost onAddPage na kterou by reagovaly modely které tomuto eventu naslouchjí.

Ideální využití by mohlo být ve chvíli kdy mám více modulů a potřebuji aby na sebe mohli bez závislosti reagovat. Respektive mám třeba PagesModule, MailModule, LogginModule. Kdy MailModule a LogginModule reagují na události vyvolané PagesModulem.

Je nějaké řešení v Nette které jsem přehlédl, napadá vás lepší řešení :) nebo vám příjde že by mělo smysl něco podobného implementovat.

Díky za radu

Editoval vaclav (26. 1. 2010 17:13)

Aurielle
Člen | 1281
+
0
-

Myslím si, že tohle v Nette přímo je :) Můžeš si třeba nastavit Environment::getUser()->onAuthenticate[] = array($this, 'setUserAsActive') a toto se automaticky provede při přihlášení uživatele.

David Grudl
Nette Core | 8228
+
0
-

To by tě mohlo zajímat SplSubject a SplObserver.

vaclav
Člen | 4
+
0
-

Díky :)