findDefinition(SidebarComponentsRegistry::class); $components = []; foreach ($container->findTaggedServiceIds($this->tagName) as $id => $tags) { $definition = $container->findDefinition($id); if (!$definition->isAutoconfigured() || $definition->isAbstract()) { continue; } foreach ($tags as $attributes) { $identifier = $attributes['identifier'] ?? null; if (empty($identifier)) { throw new \RuntimeException( sprintf('Sidebar component %s must have an identifier', $id), 1765923036 ); } if (!is_subclass_of($container->getParameterBag()->resolveValue($definition->getClass()), SidebarComponentInterface::class)) { throw new \InvalidArgumentException( sprintf('Sidebar component "%s" must implement SidebarComponentInterface', $identifier), 1734373001 ); } $before = GeneralUtility::trimExplode(',', $attributes['before'] ?? '', true); $after = GeneralUtility::trimExplode(',', $attributes['after'] ?? '', true); $components[$identifier] = [ 'before' => $before, 'after' => $after, 'serviceName' => $id, ]; } } // Order components by dependencies $dependencyOrderingService = new DependencyOrderingService(); $orderedComponents = $dependencyOrderingService->orderByDependencies($components); // Build ordered references array $registryDefinition->setArgument('$sidebarComponents', array_map(static fn($config) => new Reference($config['serviceName']), $orderedComponents)); } }