eZ\Bundle\EzPublishCoreBundle\DependencyInjection\Compiler\ViewProvidersPass::process PHP Method

process() public method

public process ( ContainerBuilder $container )
$container Symfony\Component\DependencyInjection\ContainerBuilder
    public function process(ContainerBuilder $container)
    {
        $rawViewProviders = [];
        foreach ($container->findTaggedServiceIds('ezpublish.view_provider') as $serviceId => $tags) {
            foreach ($tags as $attributes) {
                // Priority range is between -255 (the lowest) and 255 (the highest)
                $priority = isset($attributes['priority']) ? max(min((int) $attributes['priority'], 255), -255) : 0;
                if (!isset($attributes['type'])) {
                    throw new LogicException("Missing mandatory attribute 'type' for ezpublish.view_provider tag");
                }
                $type = $attributes['type'];
                $rawViewProviders[$type][$priority][] = new Reference($serviceId);
            }
        }
        $viewProviders = [];
        foreach ($rawViewProviders as $type => $viewProvidersPerPriority) {
            krsort($viewProvidersPerPriority);
            foreach ($viewProvidersPerPriority as $priorityViewProviders) {
                if (!isset($viewProviders[$type])) {
                    $viewProviders[$type] = [];
                }
                $viewProviders[$type] = array_merge($viewProviders[$type], $priorityViewProviders);
            }
        }
        if ($container->hasDefinition('ezpublish.view_provider.registry')) {
            $container->getDefinition('ezpublish.view_provider.registry')->addMethodCall('setViewProviders', [$viewProviders]);
        }
        $flattenedViewProviders = [];
        foreach ($viewProviders as $type => $typeViewProviders) {
            foreach ($typeViewProviders as $typeViewProvider) {
                $flattenedViewProviders[] = $typeViewProvider;
            }
        }
        if ($container->hasDefinition('ezpublish.config_scope_listener')) {
            $container->getDefinition('ezpublish.config_scope_listener')->addMethodCall('setViewProviders', [$flattenedViewProviders]);
        }
        // 5.4.5 BC service after location view deprecation
        if ($container->hasDefinition('ezpublish.view.custom_location_controller_checker')) {
            $container->getDefinition('ezpublish.view.custom_location_controller_checker')->addMethodCall('addViewProviders', [$viewProviders['eZ\\Publish\\Core\\MVC\\Symfony\\View\\ContentView']]);
        }
    }
ViewProvidersPass