Kdyby\Events – jde zakázat „superglobální“ eventy?

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

Zdravím,

po půl roce matlání CMSka mě čeká masivní refactoring a chtěl bych začít ve větší míře využívat eventy, protože z nich plyne mnoho výhod, které se mi dost líbí. Myšlenka že napíšu třídu, která dělá jednu věc, a jednoduchým způsobem ji řeknu, ať poslouchá na konkrétním eventu jiného objektu, je velmi lákavá, zvlášť s možností zapínání/vypínání listenerů jednoduše jak jinak než pomocí configu.

Nicméně jsem si všiml jedné pro mě dost nepříjemné vlastnosti – pro každý event s namespace se mi vytvoří i „superglobální“ varianta bez ns a na to se mi vesele navěšují listenery, byť jim v getSubscribedEvents() jasně říkám, ať poslouchají na konkrétních eventech s namespace.

Toto pro mě v praxi znamená, že musím být velmi kreativní s názvy eventů, aby se mi netvořily hroudy nesouvisejících eventů, které je možné naráz odpálit jedním příkazem.

Nevím, nakolik to souvisí s Kdyby, co jsem se v tom trochu rýpal, tak na mě to hodně působí jako vlastnost event manageru přímo v Doctrině (rozšíření typu Gedmo díky tomu mohou poslouchat globálně na onFlush apod.), ale stejně bych se rád zeptal, jestli to jde nějak vypnout, třeba v configu přidat nějaký tag, který listeneru řekne, aby neposlouchal na globálních eventech? V praxi to ani nebudu potřebovat (100 různých objektů s eventem „onUpdate“ – budu je chtít někdy odpálit naráz? Asi těžko).

Předem moc díky za rady!

Filip Procházka
Moderator | 4668
+
+1
-

Toto pro mě v praxi znamená, že musím být velmi kreativní s názvy eventů, aby se mi netvořily hroudy nesouvisejících eventů, které je možné naráz odpálit jedním příkazem.

To není pravda, musel bys explicitně zavolat $evm->dispatchEvent('onPrePersist') aby se zavolaly i ty „superglobální“.

Tohle tam je kvůli Doctrine z historických důvodů, ale mám vymyšlené jak se toho zbavit. Ničemu by to ale nemělo vadit :)

Vypnout to zatím nejde, ale brzy to zmizí úplně.

Zax
Člen | 370
+
0
-

Problém je hlavně s tou Doctrinou, nemůžu si svůj event pojmenovat třeba onFlush (což bylo první co jsem zkusil a pochopitelně jsem se divil, proč se provádí i to, co nechci). A co když se vývojáři Doctriny rozhodnou časem přidat další event, třeba zmíněný onUpdate, a používat ho globálně jako všechny ostatní? To by trochu zamrzelo kdybych měl celý CMSko prolezlý eventy onUpdate :-D Že to zmizí je IMO super zpráva! Díky!