@@ -12,27 +12,71 @@ class ContainerAwareRegistry implements Registry, ContainerAwareInterface
12
12
/**
13
13
* @var string[]
14
14
*/
15
- private $ transformersMap ;
15
+ private $ eventNamesMap ;
16
16
17
17
/**
18
- * @param string[] $transformersMap
18
+ * @var string[]
19
19
*/
20
- public function __construct (array $ transformersMap )
20
+ private $ transformerIdsMap ;
21
+
22
+ /**
23
+ * @param string[] $eventNamesMap
24
+ * @param string[] $transformerIdsMap
25
+ */
26
+ public function __construct (array $ eventNamesMap , array $ transformerIdsMap )
21
27
{
22
- $ this ->transformersMap = $ transformersMap ;
28
+ $ this ->eventNamesMap = $ eventNamesMap ;
29
+ $ this ->transformerIdsMap = $ transformerIdsMap ;
23
30
}
24
31
25
32
/**
26
33
* {@inheritdoc}
27
34
*/
28
- public function getTransformer ($ eventName )
35
+ public function getTransformerNameForEvent ($ eventName )
29
36
{
30
- if (false == array_key_exists ($ eventName , $ this ->transformersMap )) {
37
+ $ transformerName = null ;
38
+ if (array_key_exists ($ eventName , $ this ->eventNamesMap )) {
39
+ $ transformerName = $ this ->eventNamesMap [$ eventName ];
40
+ } else {
41
+ foreach ($ this ->eventNamesMap as $ eventNamePattern => $ name ) {
42
+ if ('/ ' != $ eventNamePattern [0 ]) {
43
+ continue ;
44
+ }
45
+
46
+ if (preg_match ($ eventNamePattern , $ eventName )) {
47
+ $ transformerName = $ name ;
48
+
49
+ break ;
50
+ }
51
+ }
52
+ }
53
+
54
+ if (empty ($ transformerName )) {
31
55
throw new \LogicException (sprintf ('There is no transformer registered for the given event %s ' , $ eventName ));
32
56
}
33
57
34
- // TODO add check container returns instance of EventTransformer interface.
58
+ return $ transformerName ;
59
+ }
60
+
61
+ /**
62
+ * {@inheritdoc}
63
+ */
64
+ public function getTransformer ($ name )
65
+ {
66
+ if (false == array_key_exists ($ name , $ this ->transformerIdsMap )) {
67
+ throw new \LogicException (sprintf ('There is no transformer named %s ' , $ name ));
68
+ }
69
+
70
+ $ transformer = $ this ->container ->get ($ this ->transformerIdsMap [$ name ]);
71
+
72
+ if (false == $ transformer instanceof EventTransformer) {
73
+ throw new \LogicException (sprintf (
74
+ 'The container must return instance of %s but got %s ' ,
75
+ EventTransformer::class,
76
+ is_object ($ transformer ) ? get_class ($ transformer ) : gettype ($ transformer )
77
+ ));
78
+ }
35
79
36
- return $ this -> container -> get ( $ this -> transformersMap [ $ eventName ]) ;
80
+ return $ transformer ;
37
81
}
38
82
}
0 commit comments