@@ -12,27 +12,71 @@ class ContainerAwareRegistry implements Registry, ContainerAwareInterface
1212 /**
1313 * @var string[]
1414 */
15- private $ transformersMap ;
15+ private $ eventNamesMap ;
1616
1717 /**
18- * @param string[] $transformersMap
18+ * @var string[]
1919 */
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 )
2127 {
22- $ this ->transformersMap = $ transformersMap ;
28+ $ this ->eventNamesMap = $ eventNamesMap ;
29+ $ this ->transformerIdsMap = $ transformerIdsMap ;
2330 }
2431
2532 /**
2633 * {@inheritdoc}
2734 */
28- public function getTransformer ($ eventName )
35+ public function getTransformerNameForEvent ($ eventName )
2936 {
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 )) {
3155 throw new \LogicException (sprintf ('There is no transformer registered for the given event %s ' , $ eventName ));
3256 }
3357
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+ }
3579
36- return $ this -> container -> get ( $ this -> transformersMap [ $ eventName ]) ;
80+ return $ transformer ;
3781 }
3882}
0 commit comments