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
|
|
|
*/ |
28
|
5 |
|
public function configureEventBus($buses, ContainerBuilder $container) |
29
|
|
|
{ |
30
|
5 |
|
foreach ($buses as $busName => $busConfig) { |
31
|
5 |
|
$resolverServiceId = "narrator.event_bus.$busName.resolver"; |
32
|
5 |
|
$resolverConfig = isset($busConfig['resolver']) ? $busConfig['resolver'] : []; |
33
|
5 |
|
$resolver = $this->buildResolver($resolverConfig); |
34
|
|
|
|
35
|
5 |
|
if ($resolver instanceof Definition) { |
36
|
4 |
|
$container->setDefinition($resolverServiceId, $resolver); |
37
|
1 |
|
} elseif ($resolver instanceof Alias) { |
38
|
1 |
|
$container->setAlias($resolverServiceId, $resolver); |
39
|
|
|
} |
40
|
5 |
|
$busDefinition = new Definition( |
41
|
5 |
|
BasicEventBus::class, |
42
|
|
|
[ |
43
|
5 |
|
new Reference($resolverServiceId), |
44
|
|
|
[] |
45
|
|
|
] |
46
|
|
|
); |
47
|
5 |
|
$busDefinition->setPublic($busConfig['public']); |
48
|
5 |
|
$container->setDefinition("narrator.event_bus.$busName", $busDefinition); |
49
|
|
|
} |
50
|
5 |
|
} |
51
|
|
|
|
52
|
|
|
/** |
53
|
|
|
* @param array $resolverConfig |
54
|
|
|
* @return Alias|Definition |
55
|
|
|
*/ |
56
|
5 |
|
private function buildResolver($resolverConfig) |
57
|
|
|
{ |
58
|
5 |
|
$resolverType = isset($resolverConfig['type']) ? $resolverConfig['type'] : 'name'; |
59
|
|
|
switch ($resolverType) { |
60
|
5 |
|
case 'instanceof': |
61
|
2 |
|
return new Definition(InstanceOfResolver::class); |
62
|
4 |
|
case 'service': |
63
|
1 |
|
return new Alias($resolverConfig['service_id'], false); |
64
|
|
|
default: |
65
|
3 |
|
$nameExtractorId = isset($resolverConfig['name_extractor']) ? $resolverConfig['name_extractor'] : "narrator.name_extractor.class_name"; |
66
|
3 |
|
return new Definition( |
67
|
3 |
|
NameBasedResolver::class, |
68
|
3 |
|
[new Reference($nameExtractorId)] |
69
|
|
|
); |
70
|
|
|
} |
71
|
|
|
} |
72
|
|
|
} |
73
|
|
|
|