tagName = $tagName; } /** * @throws InvalidTypeConverterConfigurationException */ public function process(ContainerBuilder $container): void { $typeConverterRegistryDefinition = $container->findDefinition(TypeConverterRegistry::class); foreach ($container->findTaggedServiceIds($this->tagName) as $serviceName => $tags) { $definition = $container->findDefinition($serviceName); if (!$definition->isAutoconfigured() || $definition->isAbstract()) { continue; } $definition->setPublic(true); foreach ($tags as $attributes) { if (!isset($attributes['sources'])) { throw new InvalidTypeConverterConfigurationException( sprintf( 'Configuration for TypeConverter "%s" misses the "sources" attribute.', $serviceName ), 1638376684 ); } $sources = GeneralUtility::trimExplode(',', (string)$attributes['sources'], true); if ($sources === []) { throw new InvalidTypeConverterConfigurationException( sprintf( 'The sources attribute of the configuration of TypeConverter "%s" contains an empty list.', $serviceName ), 1638376687 ); } if (!($attributes['target'] ?? false)) { throw new InvalidTypeConverterConfigurationException( sprintf( 'Configuration for TypeConverter "%s" misses a valid "target" attribute.', $serviceName ), 1638376689 ); } $typeConverterRegistryDefinition->addMethodCall('add', [ $definition, (int)($attributes['priority'] ?? 10), $sources, $attributes['target'], ]); } } } }