22
33namespace SymfonyBundles \QueueBundle \DependencyInjection ;
44
5- use Symfony \Component \Config \ FileLocator ;
6- use Symfony \Component \DependencyInjection \Loader ;
5+ use Symfony \Component \DependencyInjection \ Reference ;
6+ use Symfony \Component \DependencyInjection \Definition ;
77use Symfony \Component \DependencyInjection \ContainerBuilder ;
88use Symfony \Component \HttpKernel \DependencyInjection \ConfigurableExtension ;
99
1010class QueueExtension extends ConfigurableExtension
1111{
12-
1312 /**
1413 * {@inheritdoc}
1514 */
1615 protected function loadInternal (array $ configs , ContainerBuilder $ container )
1716 {
18- $ loader = new Loader \YamlFileLoader (
19- $ container , new FileLocator (__DIR__ . '/../Resources/config ' )
20- );
17+ $ this ->addService ($ configs , $ container );
18+ $ this ->addStorage ($ configs , $ container );
19+ }
20+
21+ /**
22+ * @param array $configs
23+ * @param ContainerBuilder $container
24+ */
25+ private function addService (array $ configs , ContainerBuilder $ container )
26+ {
27+ $ alias = $ this ->getAlias ();
28+ $ storageReference = new Reference ('sb_queue.storage ' );
2129
22- $ loader ->load ('services.yml ' );
30+ $ service = new Definition ($ configs ['service ' ]['class ' ]);
31+ $ service ->addMethodCall ('setName ' , [$ configs ['settings ' ]['queue_default_name ' ]]);
32+ $ service ->addMethodCall ('setStorage ' , [$ storageReference ]);
2333
24- $ container ->setAlias ($ configs ['service_name ' ], 'sb_queue ' );
25- $ container ->setParameter ('sb_queue.default_name ' , $ configs ['default_name ' ]);
34+ $ container ->setDefinition ($ alias , $ service );
35+ $ container ->setAlias ($ configs ['service ' ]['alias ' ], $ alias );
36+ }
37+
38+ /**
39+ * @param array $configs
40+ * @param ContainerBuilder $container
41+ */
42+ private function addStorage (array $ configs , ContainerBuilder $ container )
43+ {
44+ if (false === isset ($ configs ['storages ' ][$ configs ['service ' ]['storage ' ]])) {
45+ throw new \InvalidArgumentException (sprintf ('Not available storage `%s`. ' , $ configs ['service ' ]['storage ' ]));
46+ }
47+
48+ $ parameters = $ configs ['storages ' ][$ configs ['service ' ]['storage ' ]];
49+
50+ $ storage = new Definition ($ parameters ['class ' ]);
51+ $ storage ->addArgument (new Reference ($ parameters ['client ' ]));
52+
53+ $ container ->setDefinition ('sb_queue.storage ' , $ storage );
2654 }
2755
2856 /**
@@ -32,5 +60,4 @@ public function getAlias()
3260 {
3361 return 'sb_queue ' ;
3462 }
35-
3663}
0 commit comments