Kdyby\Events – jde zakázat „superglobální“ eventy?
- Zax
- Člen | 370
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
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
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!