addInitializer([$this, 'injectEventManager']); $this->addInitializer([$this, 'injectPluginManager']); parent::__construct($configOrContainerInstance, $config); } /** * Validate a plugin * * {@inheritDoc} */ public function validate($plugin) { if (! $plugin instanceof $this->instanceOf) { throw new InvalidServiceException(sprintf( 'Plugin of type "%s" is invalid; must implement %s', (get_debug_type($plugin)), $this->instanceOf )); } } /** * Initializer: inject EventManager instance * * If we have an event manager composed already, make sure it gets injected * with the shared event manager. * * The AbstractController lazy-instantiates an EM instance, which is why * the shared EM injection needs to happen; the conditional will always * pass. * * @param ContainerInterface $container * @param DispatchableInterface $controller */ public function injectEventManager(ContainerInterface $container, $controller) { if (! $controller instanceof EventManagerAwareInterface) { return; } $events = $controller->getEventManager(); if (! $events || ! $events->getSharedManager() instanceof SharedEventManagerInterface) { $controller->setEventManager($container->get('EventManager')); } } /** * Initializer: inject plugin manager * * @param DispatchableInterface $controller */ public function injectPluginManager(ContainerInterface $container, $controller) { if (! method_exists($controller, 'setPluginManager')) { return; } $controller->setPluginManager($container->get('ControllerPluginManager')); } }