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