injectableFactory = $injectableFactory; $this->metadata = $metadata; } public function process(Entity $entity): void { foreach ($this->createProcessorList($entity->getEntityType()) as $processor) { $processor->process($entity); } } /** * @return LoadProcessor[] */ private function createProcessorList(string $entityType): array { $list = []; foreach ($this->getProcessorClassNameList($entityType) as $className) { $list[] = $this->createProcessor($className); } return $list; } /** * @return string[] */ private function getProcessorClassNameList(string $entityType): array { $list = $this->metadata ->get(['app', 'fieldProcessing', 'loadProcessorClassNameList']) ?? []; $additionalList = $this->metadata ->get(['recordDefs', $entityType, 'loadProcessorClassNameList']) ?? []; return array_merge($list, $additionalList); } private function createProcessor(string $className): LoadProcessor { return $this->injectableFactory->create($className); } }