@@ -342,7 +342,8 @@ public function accept(AbstractPage $page, $recursive = true)
342342 */
343343 protected function isAllowed ($ params )
344344 {
345- $ results = $ this ->getEventManager ()->trigger (__FUNCTION__ , $ this , $ params );
345+ $ events = $ this ->getEventManager () ?: $ this ->createEventManager ();
346+ $ results = $ events ->trigger (__FUNCTION__ , $ this , $ params );
346347 return $ results ->last ();
347348 }
348349
@@ -513,22 +514,23 @@ public function setEventManager(EventManagerInterface $events)
513514
514515 $ this ->events = $ events ;
515516
516- $ this ->setDefaultListeners ();
517+ if ($ events ->getSharedManager ()) {
518+ $ this ->setDefaultListeners ();
519+ }
517520
518521 return $ this ;
519522 }
520523
521524 /**
522- * Get the event manager.
525+ * Get the event manager, if present.
526+ *
527+ * Internally, the helper will lazy-load an EM instance the first time it
528+ * requires one, but ideally it should be injected during instantiation.
523529 *
524- * @return EventManagerInterface
530+ * @return null| EventManagerInterface
525531 */
526532 public function getEventManager ()
527533 {
528- if (null === $ this ->events ) {
529- $ this ->setEventManager ($ this ->createEventManager ());
530- }
531-
532534 return $ this ->events ;
533535 }
534536
@@ -956,7 +958,13 @@ protected function setDefaultListeners()
956958 return ;
957959 }
958960
959- $ this ->getEventManager ()->getSharedManager ()->attach (
961+ $ events = $ this ->getEventManager () ?: $ this ->createEventManager ();
962+
963+ if (! $ events ->getSharedManager ()) {
964+ return ;
965+ }
966+
967+ $ events ->getSharedManager ()->attach (
960968 'Zend\View\Helper\Navigation\AbstractHelper ' ,
961969 'isAllowed ' ,
962970 ['Zend\View\Helper\Navigation\Listener\AclListener ' , 'accept ' ]
@@ -975,9 +983,13 @@ private function createEventManager()
975983 {
976984 $ r = new ReflectionClass (EventManager::class);
977985 if ($ r ->hasMethod ('setSharedManager ' )) {
978- return new EventManager ();
986+ $ events = new EventManager ();
987+ $ events ->setSharedManager (new SharedEventManager ());
988+ } else {
989+ $ events = new EventManager (new SharedEventManager ());
979990 }
980991
981- return new EventManager (new SharedEventManager ());
992+ $ this ->setEventManager ($ events );
993+ return $ events ;
982994 }
983995}
0 commit comments