4
4
5
5
namespace EduardoMarques \DynamoPHPBundle ;
6
6
7
- use Aws \DynamoDb \DynamoDbClient ;
8
- use Aws \DynamoDb \Marshaler ;
9
7
use EduardoMarques \DynamoPHP \Metadata \MetadataLoader ;
10
8
use EduardoMarques \DynamoPHP \ODM \EntityManager ;
11
9
use EduardoMarques \DynamoPHP \ODM \OpArgsBuilder ;
15
13
use Symfony \Component \Config \Definition \Configurator \DefinitionConfigurator ;
16
14
use Symfony \Component \DependencyInjection \ContainerBuilder ;
17
15
use Symfony \Component \DependencyInjection \Loader \Configurator \ContainerConfigurator ;
16
+ use Symfony \Component \DependencyInjection \Loader \Configurator \ReferenceConfigurator ;
18
17
use Symfony \Component \HttpKernel \Bundle \AbstractBundle ;
19
18
20
19
final class DynamoPHPBundle extends AbstractBundle
@@ -27,8 +26,18 @@ public function configure(DefinitionConfigurator $definition): void
27
26
/** @phpstan-ignore-next-line */
28
27
$ definition ->rootNode ()
29
28
->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 ()
32
41
->end ();
33
42
}
34
43
@@ -38,53 +47,48 @@ public function configure(DefinitionConfigurator $definition): void
38
47
*/
39
48
public function loadExtension (array $ config , ContainerConfigurator $ container , ContainerBuilder $ builder ): void
40
49
{
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 ' ];
52
53
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 ();
61
55
62
- $ services ->set (MetadataLoader::class)
63
- ->autowire ()
64
- ->autoconfigure ()
65
- ->private ();
56
+ $ services ->set (MetadataLoader::class)->autowire ()->autoconfigure ()->private ();
66
57
67
58
$ services ->set (EntityNormalizer::class)
59
+ ->arg ('$metadataLoader ' , new ReferenceConfigurator (MetadataLoader::class))
60
+ ->arg ('$normalizer ' , new ReferenceConfigurator ($ serializerId ))
68
61
->autowire ()
69
62
->autoconfigure ()
70
- ->public ();
63
+ ->private ();
71
64
72
65
$ services ->set (EntityDenormalizer::class)
66
+ ->arg ('$metadataLoader ' , new ReferenceConfigurator (MetadataLoader::class))
67
+ ->arg ('$denormalizer ' , new ReferenceConfigurator ($ serializerId ))
73
68
->autowire ()
74
69
->autoconfigure ()
75
- ->public ();
70
+ ->private ();
76
71
77
72
$ services ->set (EntitySerializer::class)
73
+ ->arg ('$entityNormalizer ' , new ReferenceConfigurator (EntityNormalizer::class))
74
+ ->arg ('$entityDenormalizer ' , new ReferenceConfigurator (EntityDenormalizer::class))
75
+ ->arg ('$marshaler ' , new ReferenceConfigurator ($ marshalerId ))
78
76
->autowire ()
79
77
->autoconfigure ()
80
78
->public ();
81
79
82
80
$ services ->set (OpArgsBuilder::class)
81
+ ->arg ('$normalizer ' , new ReferenceConfigurator ($ serializerId ))
82
+ ->arg ('$marshaler ' , new ReferenceConfigurator ($ marshalerId ))
83
83
->autowire ()
84
84
->autoconfigure ()
85
85
->public ();
86
86
87
87
$ 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))
88
92
->autowire ()
89
93
->autoconfigure ()
90
94
->public ();
0 commit comments