44
55namespace EduardoMarques \DynamoPHPBundle ;
66
7- use Aws \DynamoDb \DynamoDbClient ;
8- use Aws \DynamoDb \Marshaler ;
97use EduardoMarques \DynamoPHP \Metadata \MetadataLoader ;
108use EduardoMarques \DynamoPHP \ODM \EntityManager ;
119use EduardoMarques \DynamoPHP \ODM \OpArgsBuilder ;
1513use Symfony \Component \Config \Definition \Configurator \DefinitionConfigurator ;
1614use Symfony \Component \DependencyInjection \ContainerBuilder ;
1715use Symfony \Component \DependencyInjection \Loader \Configurator \ContainerConfigurator ;
16+ use Symfony \Component \DependencyInjection \Loader \Configurator \ReferenceConfigurator ;
1817use Symfony \Component \HttpKernel \Bundle \AbstractBundle ;
1918
2019final class DynamoPHPBundle extends AbstractBundle
@@ -27,8 +26,18 @@ public function configure(DefinitionConfigurator $definition): void
2726 /** @phpstan-ignore-next-line */
2827 $ definition ->rootNode ()
2928 ->children ()
30- ->variableNode ('client ' )->end ()
31- ->variableNode ('marshaler ' )->end ()
29+ ->scalarNode ('client ' )->info ('Service ID of the AWS DynamoDB client to use ' )
30+ ->isRequired ()
31+ ->cannotBeEmpty ()
32+ ->end ()
33+ ->scalarNode ('marshaler ' )->info ('Service ID of the AWS Marshaler to use ' )
34+ ->isRequired ()
35+ ->cannotBeEmpty ()
36+ ->end ()
37+ ->scalarNode ('serializer ' )->info ('Service ID of the Symfony Serializer to use ' )
38+ ->isRequired ()
39+ ->cannotBeEmpty ()
40+ ->end ()
3241 ->end ();
3342 }
3443
@@ -38,53 +47,48 @@ public function configure(DefinitionConfigurator $definition): void
3847 */
3948 public function loadExtension (array $ config , ContainerConfigurator $ container , ContainerBuilder $ builder ): void
4049 {
41- $ services = $ container ->services ();
42-
43- if (
44- false === $ builder ->hasDefinition (DynamoDbClient::class)
45- && false === $ builder ->hasAlias (DynamoDbClient::class)
46- ) {
47- $ services ->set (DynamoDbClient::class)
48- ->factory ([DynamoDbClient::class, 'factory ' ])
49- ->arg (0 , $ config ['client ' ] ?? [])
50- ->public ();
51- }
50+ $ clientId = $ config ['client ' ];
51+ $ marshalerId = $ config ['marshaler ' ];
52+ $ serializerId = $ config ['serializer ' ];
5253
53- if (
54- false === $ builder ->hasDefinition (Marshaler::class)
55- && false === $ builder ->hasAlias (Marshaler::class)
56- ) {
57- $ services ->set (Marshaler::class)
58- ->arg (0 , $ config ['marshaler ' ] ?? [])
59- ->public ();
60- }
54+ $ services = $ container ->services ();
6155
62- $ services ->set (MetadataLoader::class)
63- ->autowire ()
64- ->autoconfigure ()
65- ->private ();
56+ $ services ->set (MetadataLoader::class)->autowire ()->autoconfigure ()->private ();
6657
6758 $ services ->set (EntityNormalizer::class)
59+ ->arg ('$metadataLoader ' , new ReferenceConfigurator (MetadataLoader::class))
60+ ->arg ('$normalizer ' , new ReferenceConfigurator ($ serializerId ))
6861 ->autowire ()
6962 ->autoconfigure ()
70- ->public ();
63+ ->private ();
7164
7265 $ services ->set (EntityDenormalizer::class)
66+ ->arg ('$metadataLoader ' , new ReferenceConfigurator (MetadataLoader::class))
67+ ->arg ('$denormalizer ' , new ReferenceConfigurator ($ serializerId ))
7368 ->autowire ()
7469 ->autoconfigure ()
75- ->public ();
70+ ->private ();
7671
7772 $ services ->set (EntitySerializer::class)
73+ ->arg ('$entityNormalizer ' , new ReferenceConfigurator (EntityNormalizer::class))
74+ ->arg ('$entityDenormalizer ' , new ReferenceConfigurator (EntityDenormalizer::class))
75+ ->arg ('$marshaler ' , new ReferenceConfigurator ($ marshalerId ))
7876 ->autowire ()
7977 ->autoconfigure ()
8078 ->public ();
8179
8280 $ services ->set (OpArgsBuilder::class)
81+ ->arg ('$normalizer ' , new ReferenceConfigurator ($ serializerId ))
82+ ->arg ('$marshaler ' , new ReferenceConfigurator ($ marshalerId ))
8383 ->autowire ()
8484 ->autoconfigure ()
8585 ->public ();
8686
8787 $ services ->set (EntityManager::class)
88+ ->arg ('$dynamoDbClient ' , new ReferenceConfigurator ($ clientId ))
89+ ->arg ('$metadataLoader ' , new ReferenceConfigurator (MetadataLoader::class))
90+ ->arg ('$entitySerializer ' , new ReferenceConfigurator (EntitySerializer::class))
91+ ->arg ('$opArgsBuilder ' , new ReferenceConfigurator (OpArgsBuilder::class))
8892 ->autowire ()
8993 ->autoconfigure ()
9094 ->public ();
0 commit comments