objectManager = $objectManager; $this->compositeFactory = $compositeFactory; $this->actionHandlerResolver = $actionHandlerResolver; $this->validationCompositeFactory = $validationCompositeFactory; $this->dummyHandlerClass = $dummyHandlerClass; } public function create(MetadataInterface $metadata, int $fetchStrategy = self::FETCH_ONE): LoggingActionInterface { $loggingActions = []; $actionName = $metadata->getRequest()->getFullActionName(); $handlerClasses = $this->actionHandlerResolver->getHandlers($actionName, $metadata->getEventName()); switch ($fetchStrategy) { case self::FETCH_ONE: $handlerClasses = [$handlerClasses[0] ?? $this->dummyHandlerClass]; break; default: $handlerClasses = !empty($handlerClasses) ? $handlerClasses : [$this->dummyHandlerClass]; } foreach ($handlerClasses as $handlerClass) { $loggingActions[] = $this->initializeLoggingAction($handlerClass, $metadata); } return $this->compositeFactory->create(['actions' => $loggingActions]); } private function initializeLoggingAction(string $class, MetadataInterface $metadata): LoggingActionInterface { $action = $this->objectManager->create($class, ['metadata' => $metadata]); $eventName = $metadata->getEventName(); $actionName = $metadata->getRequest()->getFullActionName(); $validators = $this->actionHandlerResolver->getValidators($actionName, $eventName, $class); if ($validators) { return $this->validationCompositeFactory->create([ 'metadata' => $metadata, 'wrappedAction' => $action, 'validators' => $validators ]); } return $action; } }