1
|
|
|
<?php |
2
|
|
|
/** |
3
|
|
|
* Narrator Bundle |
4
|
|
|
* |
5
|
|
|
* @link http://github.com/mleko/narrator-bundle |
6
|
|
|
* @copyright Copyright (c) 2017 Daniel Król |
7
|
|
|
* @license MIT |
8
|
|
|
*/ |
9
|
|
|
|
10
|
|
|
|
11
|
|
|
namespace Mleko\Narrator\Bundle\DependencyInjection\Configuration; |
12
|
|
|
|
13
|
|
|
|
14
|
|
|
use Mleko\Narrator\BasicEventBus; |
15
|
|
|
use Mleko\Narrator\ListenerResolver\InstanceOfResolver; |
16
|
|
|
use Mleko\Narrator\ListenerResolver\NameBasedResolver; |
17
|
|
|
use Symfony\Component\DependencyInjection\Alias; |
18
|
|
|
use Symfony\Component\DependencyInjection\ContainerBuilder; |
19
|
|
|
use Symfony\Component\DependencyInjection\Definition; |
20
|
|
|
use Symfony\Component\DependencyInjection\Reference; |
21
|
|
|
|
22
|
|
|
class EventBusConfiguration |
23
|
|
|
{ |
24
|
|
|
/** |
25
|
|
|
* @param $buses |
26
|
|
|
* @param ContainerBuilder $container |
27
|
3 |
|
*/ |
28
|
|
|
public function configureEventBus($buses, ContainerBuilder $container) |
29
|
3 |
|
{ |
30
|
3 |
|
foreach ($buses as $busName => $busConfig) { |
31
|
3 |
|
$resolverServiceId = "narrator.event_bus.$busName.resolver"; |
32
|
3 |
|
$resolverConfig = isset($busConfig['resolver']) ? $busConfig['resolver'] : []; |
33
|
3 |
|
$resolver = $this->buildResolver($resolverConfig); |
34
|
3 |
|
|
35
|
3 |
|
if ($resolver instanceof Definition) { |
36
|
|
|
$container->setDefinition($resolverServiceId, $resolver); |
37
|
3 |
|
} elseif ($resolver instanceof Alias) { |
38
|
3 |
|
$container->setAlias($resolverServiceId, $resolver); |
39
|
3 |
|
} |
40
|
3 |
|
$container->setDefinition( |
41
|
|
|
"narrator.event_bus.$busName", |
42
|
3 |
|
new Definition( |
43
|
3 |
|
BasicEventBus::class, |
44
|
3 |
|
[ |
45
|
3 |
|
new Reference($resolverServiceId), |
46
|
3 |
|
[] |
47
|
3 |
|
] |
48
|
3 |
|
) |
49
|
|
|
); |
50
|
3 |
|
} |
51
|
|
|
} |
52
|
3 |
|
|
53
|
|
|
/** |
54
|
3 |
|
* @param array $resolverConfig |
55
|
1 |
|
* @return Alias|Definition |
56
|
3 |
|
*/ |
57
|
|
|
private function buildResolver($resolverConfig) |
58
|
3 |
|
{ |
59
|
3 |
|
$resolverType = isset($resolverConfig['type']) ? $resolverConfig['type'] : 'name'; |
60
|
3 |
|
switch ($resolverType) { |
61
|
3 |
|
case 'instanceof': |
62
|
3 |
|
return new Definition(InstanceOfResolver::class); |
63
|
3 |
|
case 'service': |
64
|
3 |
|
return new Alias($resolverConfig['service_id'], false); |
65
|
|
|
default: |
66
|
|
|
$nameExtractorId = isset($resolverConfig['name_extractor']) ? $resolverConfig['name_extractor'] : "narrator.name_extractor.class_name"; |
67
|
|
|
return new Definition( |
68
|
|
|
NameBasedResolver::class, |
69
|
|
|
[new Reference($nameExtractorId)] |
70
|
|
|
); |
71
|
|
|
} |
72
|
|
|
} |
73
|
|
|
} |
74
|
|
|
|