@@ -15,8 +15,8 @@ creation.
15
15
A Service Configurator can be used, for example, when you a have a service that
16
16
requires complex setup based on configuration settings coming from different
17
17
sources/services. Using an external configurator, you can maintain the service
18
- implementation clean and decoupled from the other objects that provide the
19
- configuration for the service .
18
+ implementation cleanly and keep it decoupled from the other objects that provide
19
+ the configuration needed .
20
20
21
21
Another interesting use case is when you have multiple objects that share a
22
22
common configuration or that should be configured in a similar way at runtime.
@@ -66,17 +66,22 @@ and also a ``GreetingCardManager`` class::
66
66
}
67
67
68
68
69
- As commented before, the formatters should be set at runtime depending on
70
- application settings, so we also have a ``EmailFormatterManager `` class which is
71
- responsible for loading and validating formatters enabled in the application::
69
+ As mentioned before, the goal is to set the formatters at runtime depending on
70
+ application settings. To do this, you also have an ``EmailFormatterManager ``
71
+ class which is responsible for loading and validating formatters enabled
72
+ in the application::
72
73
73
74
class EmailFormatterManager
74
75
{
75
76
protected $enabledFormatters;
76
77
77
78
public function loadFormatters()
78
79
{
80
+ // code to configure which formatters to use
81
+ $enabledFormatters = array();
79
82
// ...
83
+
84
+ $this->enabledFormatters = $enabledFormatters;
80
85
}
81
86
82
87
public function getEnabledFormatters()
@@ -110,7 +115,7 @@ create a configurator class to configure these instances::
110
115
// ...
111
116
}
112
117
113
- ``EmailConfigurator `` task is to inject enabled filters to ``NewsletterManager ``
118
+ The ``EmailConfigurator ``'s job is to inject the enabled filters into ``NewsletterManager ``
114
119
and ``GreetingCardManager `` because they are not aware of where the enabled
115
120
filters come from. In the other hand, the ``EmailFormatterManager `` holds the
116
121
knowledge about the enabled formatters and how to load them, keeping the single
@@ -125,67 +130,52 @@ The service config for the above classes would look something like this:
125
130
126
131
.. code-block :: yaml
127
132
128
- parameters :
129
- # ...
130
- newsletter_manager.class : NewsletterManager
131
- greeting_card_manager.class : GreetingCardManager
132
- email_formatter_manager.class : EmailFormatterManager
133
- email_configurator.class : EmailConfigurator
134
-
135
133
services :
136
134
my_mailer :
137
135
# ...
138
136
139
137
email_formatter_manager :
140
- class : " %email_formatter_manager.class% "
138
+ class : EmailFormatterManager
141
139
# ...
142
140
143
141
email_configurator :
144
- class : " %email_configurator.class% "
145
- arguments : [@email_formatter_manager]
142
+ class : EmailConfigurator
143
+ arguments : [" @email_formatter_manager" ]
146
144
# ...
147
145
148
146
newsletter_manager :
149
- class : " %newsletter_manager.class% "
147
+ class : NewsletterManager
150
148
calls :
151
- - [setMailer, [@my_mailer]]
152
- configurator : [@email_configurator, configure]
149
+ - [setMailer, [" @my_mailer" ]]
150
+ configurator : [" @email_configurator" , configure]
153
151
154
152
greeting_card_manager :
155
- class : " %greeting_card_manager.class% "
153
+ class : GreetingCardManager
156
154
calls :
157
- - [setMailer, [@my_mailer]]
158
- configurator : [@email_configurator, configure]
155
+ - [setMailer, [" @my_mailer" ]]
156
+ configurator : [" @email_configurator" , configure]
159
157
160
158
161
159
.. code-block :: xml
162
160
163
- <parameters >
164
- <!-- ... -->
165
- <parameter key =" newsletter_manager.class" >NewsletterManager</parameter >
166
- <parameter key =" greeting_card_manager.class" >GreetingCardManager</parameter >
167
- <parameter key =" email_formatter_manager.class" >EmailFormatterManager</parameter >
168
- <parameter key =" email_configurator.class" >EmailConfigurator</parameter >
169
- </parameters >
170
-
171
161
<services >
172
162
<service id =" my_mailer" ...>
173
163
<!-- ... -->
174
164
</service >
175
- <service id =" email_formatter_manager" class =" %email_formatter_manager.class% " >
165
+ <service id =" email_formatter_manager" class =" EmailFormatterManager " >
176
166
<!-- ... -->
177
167
</service >
178
- <service id =" email_configurator" class =" %email_configurator.class% " >
168
+ <service id =" email_configurator" class =" EmailConfigurator " >
179
169
<argument type =" service" id =" email_formatter_manager" />
180
170
<!-- ... -->
181
171
</service >
182
- <service id =" newsletter_manager" class =" %newsletter_manager.class% " >
172
+ <service id =" newsletter_manager" class =" NewsletterManager " >
183
173
<call method =" setMailer" >
184
174
<argument type =" service" id =" my_mailer" />
185
175
</call >
186
176
<configurator service =" email_configurator" method =" configure" />
187
177
</service >
188
- <service id =" greeting_card_manager" class =" %greeting_card_manager.class% " >
178
+ <service id =" greeting_card_manager" class =" GreetingCardManager " >
189
179
<call method =" setMailer" >
190
180
<argument type =" service" id =" my_mailer" />
191
181
</call >
@@ -199,24 +189,23 @@ The service config for the above classes would look something like this:
199
189
use Symfony\Component\DependencyInjection\Reference;
200
190
201
191
// ...
202
- $container->setParameter('newsletter_manager.class', 'NewsletterManager');
203
- $container->setParameter('greeting_card_manager.class', 'GreetingCardManager');
204
- $container->setParameter('email_formatter_manager.class', 'EmailFormatterManager');
205
- $container->setParameter('email_configurator.class', 'EmailConfigurator');
206
-
207
192
$container->setDefinition('my_mailer', ...);
208
- $container->setDefinition('email_formatter_manager', ...);
209
- $container->setDefinition('email_configurator', ...);
193
+ $container->setDefinition('email_formatter_manager', new Definition(
194
+ 'EmailFormatterManager'
195
+ ));
196
+ $container->setDefinition('email_configurator', new Definition(
197
+ 'EmailConfigurator'
198
+ ));
210
199
$container->setDefinition('newsletter_manager', new Definition(
211
- '%newsletter_manager.class% '
200
+ 'NewsletterManager '
212
201
))->addMethodCall('setMailer', array(
213
202
new Reference('my_mailer'),
214
203
))->setConfigurator(array(
215
204
new Reference('email_configurator'),
216
205
'configure',
217
206
)));
218
207
$container->setDefinition('greeting_card_manager', new Definition(
219
- '%greeting_card_manager.class% '
208
+ 'GreetingCardManager '
220
209
))->addMethodCall('setMailer', array(
221
210
new Reference('my_mailer'),
222
211
))->setConfigurator(array(
0 commit comments