@@ -44,23 +44,22 @@ public function __construct(ContainerInterface $container)
44
44
* @param EventArgs $eventArgs The event arguments to pass to the event handlers/listeners.
45
45
* If not supplied, the single empty EventArgs instance is used.
46
46
*
47
- * @return bool
47
+ * @return void
48
48
*/
49
49
public function dispatchEvent ($ eventName , EventArgs $ eventArgs = null )
50
50
{
51
- if (isset ($ this ->listeners [$ eventName ])) {
52
- $ eventArgs = null === $ eventArgs ? EventArgs::getEmptyInstance () : $ eventArgs ;
51
+ if (!isset ($ this ->listeners [$ eventName ])) {
52
+ return ;
53
+ }
53
54
54
- $ initialized = isset ( $ this -> initialized [ $ eventName ]) ;
55
+ $ eventArgs = null === $ eventArgs ? EventArgs:: getEmptyInstance () : $ eventArgs ;
55
56
56
- foreach ($ this ->listeners [$ eventName ] as $ hash => $ listener ) {
57
- if (!$ initialized && \is_string ($ listener )) {
58
- $ this ->listeners [$ eventName ][$ hash ] = $ listener = $ this ->container ->get ($ listener );
59
- }
57
+ if (!isset ($ this ->initialized [$ eventName ])) {
58
+ $ this ->initializeListeners ($ eventName );
59
+ }
60
60
61
- $ listener ->$ eventName ($ eventArgs );
62
- }
63
- $ this ->initialized [$ eventName ] = true ;
61
+ foreach ($ this ->listeners [$ eventName ] as $ hash => $ listener ) {
62
+ $ listener ->$ eventName ($ eventArgs );
64
63
}
65
64
}
66
65
@@ -73,7 +72,21 @@ public function dispatchEvent($eventName, EventArgs $eventArgs = null)
73
72
*/
74
73
public function getListeners ($ event = null )
75
74
{
76
- return $ event ? $ this ->listeners [$ event ] : $ this ->listeners ;
75
+ if (null !== $ event ) {
76
+ if (!isset ($ this ->initialized [$ event ])) {
77
+ $ this ->initializeListeners ($ event );
78
+ }
79
+
80
+ return $ this ->listeners [$ event ];
81
+ }
82
+
83
+ foreach (array_keys ($ this ->listeners ) as $ event ) {
84
+ if (!isset ($ this ->initialized [$ event ])) {
85
+ $ this ->initializeListeners ($ event );
86
+ }
87
+ }
88
+
89
+ return $ this ->listeners ;
77
90
}
78
91
79
92
/**
@@ -138,4 +151,18 @@ public function removeEventListener($events, $listener)
138
151
}
139
152
}
140
153
}
154
+
155
+ /**
156
+ * @param string $eventName
157
+ */
158
+ private function initializeListeners ($ eventName )
159
+ {
160
+ foreach ($ this ->listeners [$ eventName ] as $ hash => $ listener ) {
161
+ if (\is_string ($ listener )) {
162
+ $ this ->listeners [$ eventName ][$ hash ] = $ this ->container ->get ($ listener );
163
+ }
164
+ }
165
+
166
+ $ this ->initialized [$ eventName ] = true ;
167
+ }
141
168
}
0 commit comments