Completed
Push — master ( bd1580...0ea8fb )
by Florian
09:56
created

FacetCompilerPass::process()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 23

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 23
rs 9.552
c 0
b 0
f 0
cc 4
nc 4
nop 1
1
<?php
2
declare(strict_types=1);
3
4
namespace StingerSoft\EntitySearchBundle\DependencyInjection\Compiler;
5
6
use StingerSoft\EntitySearchBundle\Services\Facet\FacetServiceInterface;
7
use StingerSoft\EntitySearchBundle\Services\SearchService;
8
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
9
use Symfony\Component\DependencyInjection\Compiler\ServiceLocatorTagPass;
10
use Symfony\Component\DependencyInjection\ContainerBuilder;
11
use Symfony\Component\DependencyInjection\Reference;
12
13
class FacetCompilerPass implements CompilerPassInterface {
14
15
	/**
16
	 * @param ContainerBuilder $container
17
	 */
18
	public function process(ContainerBuilder $container) {
19
		if(!$container->hasAlias(SearchService::class)) {
20
			return;
21
		}
22
23
		$serviceId = (string)$container->getAlias(SearchService::class);
24
25
		if(!$container->hasDefinition($serviceId)) {
26
			return;
27
		}
28
29
		$definition = $container->getDefinition($serviceId);
30
31
		$servicesMap = array();
32
		// Builds an array with fully-qualified type class names as keys and service IDs as values
33
		foreach($container->findTaggedServiceIds(FacetServiceInterface::TAG_NAME, true) as $serviceId => $tag) {
34
			// Add form type service to the service locator
35
			$serviceDefinition = $container->getDefinition($serviceId);
36
			$servicesMap[$serviceDefinition->getClass()] = new Reference($serviceId);
37
			$servicesMap[$serviceId] = new Reference($serviceId);
38
		}
39
		$definition->addMethodCall('setFacetContainer', [ServiceLocatorTagPass::register($container, $servicesMap)]);
40
	}
41
}