has(WindowTabLocator::class)) { return; } $locator = $container->findDefinition(WindowTabLocator::class); $services = $container->findTaggedServiceIds('kupshop.admin.window_tab'); $locatableServices = []; $servicesByTypes = []; foreach ($services as $id => $tags) { /** @var WindowTab $class */ $class = $container->findDefinition($id)->getClass(); if (!$class::isAllowed()) { continue; } $locatableServices[$id] = new Reference($id); $types = $class::getTypes(); foreach ($types as $type => $priority) { $servicesByTypes[$type][$id] = $priority; } } // sort by priority foreach ($servicesByTypes as &$services) { arsort($services); } $locator->addArgument(ServiceLocatorTagPass::register($container, $locatableServices)); $locator->addArgument($servicesByTypes); } }