@@ -15,9 +15,9 @@ the class.
15
15
Suppose you have a factory that configures and returns a new ``NewsletterManager ``
16
16
object::
17
17
18
- class NewsletterFactory
18
+ class NewsletterManagerFactory
19
19
{
20
- public function get ()
20
+ public static function createNewsletterManager ()
21
21
{
22
22
$newsletterManager = new NewsletterManager();
23
23
@@ -28,22 +28,18 @@ object::
28
28
}
29
29
30
30
To make the ``NewsletterManager `` object available as a service, you can
31
- configure the service container to use the ``NewsletterFactory `` factory
31
+ configure the service container to use the ``NewsletterManagerFactory `` factory
32
32
class:
33
33
34
34
.. configuration-block ::
35
35
36
36
.. code-block :: yaml
37
37
38
- parameters :
39
- # ...
40
- newsletter_manager.class : NewsletterManager
41
- newsletter_factory.class : NewsletterFactory
42
38
services :
43
39
newsletter_manager :
44
- class : " %newsletter_manager.class% "
45
- factory_class : " %newsletter_factory.class% "
46
- factory_method : get
40
+ class : NewsletterManager
41
+ factory_class : NewsletterManagerFactory
42
+ factory_method : createNewsletterManager
47
43
48
44
.. code-block :: xml
49
45
@@ -52,18 +48,12 @@ class:
52
48
xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance"
53
49
xsi : schemaLocation =" http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd" >
54
50
55
- <parameters >
56
- <!-- ... -->
57
- <parameter key =" newsletter_manager.class" >NewsletterManager</parameter >
58
- <parameter key =" newsletter_factory.class" >NewsletterFactory</parameter >
59
- </parameters >
60
-
61
51
<services >
62
52
<service
63
53
id =" newsletter_manager"
64
- class =" %newsletter_manager.class% "
65
- factory-class =" %newsletter_factory.class% "
66
- factory-method =" get " />
54
+ class =" NewsletterManager "
55
+ factory-class =" NewsletterManagerFactory "
56
+ factory-method =" createNewsletterManager " />
67
57
</services >
68
58
</services >
69
59
@@ -72,35 +62,29 @@ class:
72
62
use Symfony\Component\DependencyInjection\Definition;
73
63
74
64
// ...
75
- $container->setParameter('newsletter_manager.class', 'NewsletterManager');
76
- $container->setParameter('newsletter_factory.class', 'NewsletterFactory');
77
-
78
- $definition = new Definition('%newsletter_manager.class%');
79
- $definition->setFactoryClass('%newsletter_factory.class%');
80
- $definition->setFactoryMethod('get');
65
+ $definition = new Definition('NewsletterManager');
66
+ $definition->setFactoryClass('NewsletterManagerFactory');
67
+ $definition->setFactoryMethod('createNewsletterManager');
81
68
82
69
$container->setDefinition('newsletter_manager', $definition);
83
70
84
71
When you specify the class to use for the factory (via ``factory_class ``)
85
72
the method will be called statically. If the factory itself should be instantiated
86
73
and the resulting object's method called, configure the factory itself as a service.
87
- In this case, the method (e.g. get) should be changed to be non-static:
74
+ In this case, the method (e.g. ``createNewsletterManager ``) should be changed
75
+ to be non-static:
88
76
89
77
.. configuration-block ::
90
78
91
79
.. code-block :: yaml
92
80
93
- parameters :
94
- # ...
95
- newsletter_manager.class : NewsletterManager
96
- newsletter_factory.class : NewsletterFactory
97
81
services :
98
- newsletter_factory :
99
- class : " %newsletter_factory.class% "
82
+ newsletter_manager_factory :
83
+ class : NewsletterManagerFactory
100
84
newsletter_manager :
101
- class : " %newsletter_manager.class% "
102
- factory_service : newsletter_factory
103
- factory_method : get
85
+ class : NewsletterManager
86
+ factory_service : newsletter_manager_factory
87
+ factory_method : createNewsletterManager
104
88
105
89
.. code-block :: xml
106
90
F438
@@ -109,40 +93,30 @@ In this case, the method (e.g. get) should be changed to be non-static:
109
93
xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance"
110
94
xsi : schemaLocation =" http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd" >
111
95
112
- <parameters >
113
- <!-- ... -->
114
- <parameter key =" newsletter_manager.class" >NewsletterManager</parameter >
115
- <parameter key =" newsletter_factory.class" >NewsletterFactory</parameter >
116
- </parameters >
117
-
118
96
<services >
119
- <service id =" newsletter_factory " class =" %newsletter_factory.class% " />
97
+ <service id =" newsletter_manager_factory " class =" NewsletterManagerFactory " />
120
98
121
99
<service
122
100
id =" newsletter_manager"
123
- class =" %newsletter_manager.class% "
124
- factory-service =" newsletter_factory "
125
- factory-method =" get " />
101
+ class =" NewsletterManager "
102
+ factory-service =" newsletter_manager_factory "
103
+ factory-method =" createNewsletterManager " />
126
104
</services >
127
105
</container >
128
106
129
107
.. code-block :: php
130
108
131
109
use Symfony\Component\DependencyInjection\Definition;
132
110
133
- // ...
134
- $container->setParameter('newsletter_manager.class', 'NewsletterManager');
135
- $container->setParameter('newsletter_factory.class', 'NewsletterFactory');
136
-
137
- $container->setDefinition('newsletter_factory', new Definition(
138
- '%newsletter_factory.class%'
111
+ $container->setDefinition('newsletter_manager_factory', new Definition(
112
+ 'NewsletterManager'
139
113
));
140
114
$container->setDefinition('newsletter_manager', new Definition(
141
- '%newsletter_manager.class% '
115
+ 'NewsletterManagerFactory '
142
116
))->setFactoryService(
143
- 'newsletter_factory '
117
+ 'newsletter_manager_factory '
144
118
)->setFactoryMethod(
145
- 'get '
119
+ 'createNewsletterManager '
146
120
);
147
121
148
122
.. note ::
@@ -155,24 +129,20 @@ Passing Arguments to the Factory Method
155
129
---------------------------------------
156
130
157
131
If you need to pass arguments to the factory method, you can use the ``arguments ``
158
- options inside the service container. For example, suppose the ``get `` method
159
- in the previous example takes the ``templating `` service as an argument:
132
+ options inside the service container. For example, suppose the ``createNewsletterManager ``
133
+ method in the previous example takes the ``templating `` service as an argument:
160
134
161
135
.. configuration-block ::
162
136
163
137
.. code-block :: yaml
164
138
165
- parameters :
166
- # ...
167
- newsletter_manager.class : NewsletterManager
168
- newsletter_factory.class : NewsletterFactory
169
139
services :
170
- newsletter_factory :
171
- class : " %newsletter_factory.class% "
140
+ newsletter_manager_factory :
141
+ class : NewsletterManagerFactory
172
142
newsletter_manager :
173
- class : " %newsletter_manager.class% "
174
- factory_service : newsletter_factory
175
- factory_method : get
143
+ class : NewsletterManager
144
+ factory_service : newsletter_manager_factory
145
+ factory_method : createNewsletterManager
176
146
arguments :
177
147
- " @templating"
178
148
@@ -183,20 +153,14 @@ in the previous example takes the ``templating`` service as an argument:
183
153
xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance"
184
154
xsi : schemaLocation =" http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd" >
185
155
186
- <parameters >
187
- <!-- ... -->
188
- <parameter key =" newsletter_manager.class" >NewsletterManager</parameter >
189
- <parameter key =" newsletter_factory.class" >NewsletterFactory</parameter >
190
- </parameters >
191
-
192
156
<services >
193
- <service id =" newsletter_factory " class =" %newsletter_factory.class% " />
157
+ <service id =" newsletter_manager_factory " class =" NewsletterManagerFactory " />
194
158
195
159
<service
196
160
id =" newsletter_manager"
197
- class =" %newsletter_manager.class% "
198
- factory-service =" newsletter_factory "
199
- factory-method =" get " >
161
+ class =" NewsletterManager "
162
+ factory-service =" newsletter_manager_factory "
163
+ factory-method =" createNewsletterManager " >
200
164
201
165
<argument type =" service" id =" templating" />
202
166
</service >
@@ -208,17 +172,14 @@ in the previous example takes the ``templating`` service as an argument:
208
172
use Symfony\Component\DependencyInjection\Definition;
209
173
210
174
// ...
211
- $container->setParameter('newsletter_manager.class', 'NewsletterManager');
212
- $container->setParameter('newsletter_factory.class', 'NewsletterFactory');
213
-
214
- $container->setDefinition('newsletter_factory', new Definition(
215
- '%newsletter_factory.class%'
175
+ $container->setDefinition('newsletter_manager_factory', new Definition(
176
+ 'NewsletterManagerFactory'
216
177
));
217
178
$container->setDefinition('newsletter_manager', new Definition(
218
- '%newsletter_manager.class% ',
179
+ 'NewsletterManager ',
219
180
array(new Reference('templating'))
220
181
))->setFactoryService(
221
- 'newsletter_factory '
182
+ 'newsletter_manager_factory '
222
183
)->setFactoryMethod(
223
- 'get '
184
+ 'createNewsletterManager '
224
185
);
0 commit comments