@@ -15,9 +15,9 @@ the class.
1515Suppose you have a factory that configures and returns a new ``NewsletterManager ``
1616object::
1717
18- class NewsletterFactory
18+ class NewsletterManagerFactory
1919 {
20- public function get ()
20+ public static function createNewsletterManager ()
2121 {
2222 $newsletterManager = new NewsletterManager();
2323
@@ -28,22 +28,18 @@ object::
2828 }
2929
3030To 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
3232class:
3333
3434.. configuration-block ::
3535
3636 .. code-block :: yaml
3737
38- parameters :
39- # ...
40- newsletter_manager.class : NewsletterManager
41- newsletter_factory.class : NewsletterFactory
4238 services :
4339 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
4743
4844 .. code-block :: xml
4945
@@ -52,18 +48,12 @@ class:
5248 xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance"
5349 xsi : schemaLocation =" http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd" >
5450
55- <parameters >
56- <!-- ... -->
57- <parameter key =" newsletter_manager.class" >NewsletterManager</parameter >
58- <parameter key =" newsletter_factory.class" >NewsletterFactory</parameter >
59- </parameters >
60-
6151 <services >
6252 <service
6353 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 " />
6757 </services >
6858 </services >
6959
@@ -72,35 +62,29 @@ class:
7262 use Symfony\Component\DependencyInjection\Definition;
7363
7464 // ...
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');
8168
8269 $container->setDefinition('newsletter_manager', $definition);
8370
8471 When you specify the class to use for the factory (via ``factory_class ``)
8572the method will be called statically. If the factory itself should be instantiated
8673and 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:
8876
8977.. configuration-block ::
9078
9179 .. code-block :: yaml
9280
93- parameters :
94- # ...
95- newsletter_manager.class : NewsletterManager
96- newsletter_factory.class : NewsletterFactory
9781 services :
98- newsletter_factory :
99- class : " %newsletter_factory.class% "
82+ newsletter_manager_factory :
83+ class : NewsletterManagerFactory
10084 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
10488
10589 .. code-block :: xml
10690
@@ -109,40 +93,30 @@ In this case, the method (e.g. get) should be changed to be non-static:
10993 xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance"
11094 xsi : schemaLocation =" http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd" >
11195
112- <parameters >
113- <!-- ... -->
114- <parameter key =" newsletter_manager.class" >NewsletterManager</parameter >
115- <parameter key =" newsletter_factory.class" >NewsletterFactory</parameter >
116- </parameters >
117-
11896 <services >
119- <service id =" newsletter_factory " class =" %newsletter_factory.class% " />
97+ <service id =" newsletter_manager_factory " class =" NewsletterManagerFactory " />
12098
12199 <service
122100 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 " />
126104 </services >
127105 </container >
128106
129107 .. code-block :: php
130108
131109 use Symfony\Component\DependencyInjection\Definition;
132110
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'
139113 ));
140114 $container->setDefinition('newsletter_manager', new Definition(
141- '%newsletter_manager.class% '
115+ 'NewsletterManagerFactory '
142116 ))->setFactoryService(
143- 'newsletter_factory '
117+ 'newsletter_manager_factory '
144118 )->setFactoryMethod(
145- 'get '
119+ 'createNewsletterManager '
146120 );
147121
148122 .. note ::
@@ -155,24 +129,20 @@ Passing Arguments to the Factory Method
155129---------------------------------------
156130
157131If 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:
160134
161135.. configuration-block ::
162136
163137 .. code-block :: yaml
164138
165- parameters :
166- # ...
167- newsletter_manager.class : NewsletterManager
168- newsletter_factory.class : NewsletterFactory
169139 services :
170- newsletter_factory :
171- class : " %newsletter_factory.class% "
140+ newsletter_manager_factory :
141+ class : NewsletterManagerFactory
172142 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
176146 arguments :
177147 - " @templating"
178148
@@ -183,20 +153,14 @@ in the previous example takes the ``templating`` service as an argument:
183153 xmlns : xsi =" http://www.w3.org/2001/XMLSchema-instance"
184154 xsi : schemaLocation =" http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd" >
185155
186- <parameters >
187- <!-- ... -->
188- <parameter key =" newsletter_manager.class" >NewsletterManager</parameter >
189- <parameter key =" newsletter_factory.class" >NewsletterFactory</parameter >
190- </parameters >
191-
192156 <services >
193- <service id =" newsletter_factory " class =" %newsletter_factory.class% " />
157+ <service id =" newsletter_manager_factory " class =" NewsletterManagerFactory " />
194158
195159 <service
196160 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 " >
200164
201165 <argument type =" service" id =" templating" />
202166 </service >
@@ -208,17 +172,14 @@ in the previous example takes the ``templating`` service as an argument:
208172 use Symfony\Component\DependencyInjection\Definition;
209173
210174 // ...
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'
216177 ));
217178 $container->setDefinition('newsletter_manager', new Definition(
218- '%newsletter_manager.class% ',
179+ 'NewsletterManager ',
219180 array(new Reference('templating'))
220181 ))->setFactoryService(
221- 'newsletter_factory '
182+ 'newsletter_manager_factory '
222183 )->setFactoryMethod(
223- 'get '
184+ 'createNewsletterManager '
224185 );
0 commit comments