diff --git a/components/dependency_injection/factories.rst b/components/dependency_injection/factories.rst
index 9f74efa50d5..6727bc838a5 100644
--- a/components/dependency_injection/factories.rst
+++ b/components/dependency_injection/factories.rst
@@ -15,9 +15,9 @@ the class.
Suppose you have a factory that configures and returns a new ``NewsletterManager``
object::
- class NewsletterFactory
+ class NewsletterManagerFactory
{
- public function get()
+ public static function createNewsletterManager()
{
$newsletterManager = new NewsletterManager();
@@ -28,22 +28,18 @@ object::
}
To make the ``NewsletterManager`` object available as a service, you can
-configure the service container to use the ``NewsletterFactory`` factory
+configure the service container to use the ``NewsletterManagerFactory`` factory
class:
.. configuration-block::
.. code-block:: yaml
- parameters:
- # ...
- newsletter_manager.class: NewsletterManager
- newsletter_factory.class: NewsletterFactory
services:
newsletter_manager:
- class: "%newsletter_manager.class%"
- factory_class: "%newsletter_factory.class%"
- factory_method: get
+ class: NewsletterManager
+ factory_class: NewsletterManagerFactory
+ factory_method: createNewsletterManager
.. code-block:: xml
@@ -52,18 +48,12 @@ class:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
-
-
- NewsletterManager
- NewsletterFactory
-
-
+ class="NewsletterManager"
+ factory-class="NewsletterManagerFactory"
+ factory-method="createNewsletterManager" />
@@ -72,35 +62,29 @@ class:
use Symfony\Component\DependencyInjection\Definition;
// ...
- $container->setParameter('newsletter_manager.class', 'NewsletterManager');
- $container->setParameter('newsletter_factory.class', 'NewsletterFactory');
-
- $definition = new Definition('%newsletter_manager.class%');
- $definition->setFactoryClass('%newsletter_factory.class%');
- $definition->setFactoryMethod('get');
+ $definition = new Definition('NewsletterManager');
+ $definition->setFactoryClass('NewsletterManagerFactory');
+ $definition->setFactoryMethod('createNewsletterManager');
$container->setDefinition('newsletter_manager', $definition);
When you specify the class to use for the factory (via ``factory_class``)
the method will be called statically. If the factory itself should be instantiated
and the resulting object's method called, configure the factory itself as a service.
-In this case, the method (e.g. get) should be changed to be non-static:
+In this case, the method (e.g. ``createNewsletterManager``) should be changed
+to be non-static:
.. configuration-block::
.. code-block:: yaml
- parameters:
- # ...
- newsletter_manager.class: NewsletterManager
- newsletter_factory.class: NewsletterFactory
services:
- newsletter_factory:
- class: "%newsletter_factory.class%"
+ newsletter_manager_factory:
+ class: NewsletterManagerFactory
newsletter_manager:
- class: "%newsletter_manager.class%"
- factory_service: newsletter_factory
- factory_method: get
+ class: NewsletterManager
+ factory_service: newsletter_manager_factory
+ factory_method: createNewsletterManager
.. code-block:: xml
@@ -109,20 +93,14 @@ In this case, the method (e.g. get) should be changed to be non-static:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
-
-
- NewsletterManager
- NewsletterFactory
-
-
-
+
+ class="NewsletterManager"
+ factory-service="newsletter_manager_factory"
+ factory-method="createNewsletterManager" />
@@ -130,19 +108,15 @@ In this case, the method (e.g. get) should be changed to be non-static:
use Symfony\Component\DependencyInjection\Definition;
- // ...
- $container->setParameter('newsletter_manager.class', 'NewsletterManager');
- $container->setParameter('newsletter_factory.class', 'NewsletterFactory');
-
- $container->setDefinition('newsletter_factory', new Definition(
- '%newsletter_factory.class%'
+ $container->setDefinition('newsletter_manager_factory', new Definition(
+ 'NewsletterManager'
));
$container->setDefinition('newsletter_manager', new Definition(
- '%newsletter_manager.class%'
+ 'NewsletterManagerFactory'
))->setFactoryService(
- 'newsletter_factory'
+ 'newsletter_manager_factory'
)->setFactoryMethod(
- 'get'
+ 'createNewsletterManager'
);
.. note::
@@ -155,24 +129,20 @@ Passing Arguments to the Factory Method
---------------------------------------
If you need to pass arguments to the factory method, you can use the ``arguments``
-options inside the service container. For example, suppose the ``get`` method
-in the previous example takes the ``templating`` service as an argument:
+options inside the service container. For example, suppose the ``createNewsletterManager``
+method in the previous example takes the ``templating`` service as an argument:
.. configuration-block::
.. code-block:: yaml
- parameters:
- # ...
- newsletter_manager.class: NewsletterManager
- newsletter_factory.class: NewsletterFactory
services:
- newsletter_factory:
- class: "%newsletter_factory.class%"
+ newsletter_manager_factory:
+ class: NewsletterManagerFactory
newsletter_manager:
- class: "%newsletter_manager.class%"
- factory_service: newsletter_factory
- factory_method: get
+ class: NewsletterManager
+ factory_service: newsletter_manager_factory
+ factory_method: createNewsletterManager
arguments:
- "@templating"
@@ -183,20 +153,14 @@ in the previous example takes the ``templating`` service as an argument:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
-
-
- NewsletterManager
- NewsletterFactory
-
-
-
+
+ class="NewsletterManager"
+ factory-service="newsletter_manager_factory"
+ factory-method="createNewsletterManager">
@@ -208,17 +172,14 @@ in the previous example takes the ``templating`` service as an argument:
use Symfony\Component\DependencyInjection\Definition;
// ...
- $container->setParameter('newsletter_manager.class', 'NewsletterManager');
- $container->setParameter('newsletter_factory.class', 'NewsletterFactory');
-
- $container->setDefinition('newsletter_factory', new Definition(
- '%newsletter_factory.class%'
+ $container->setDefinition('newsletter_manager_factory', new Definition(
+ 'NewsletterManagerFactory'
));
$container->setDefinition('newsletter_manager', new Definition(
- '%newsletter_manager.class%',
+ 'NewsletterManager',
array(new Reference('templating'))
))->setFactoryService(
- 'newsletter_factory'
+ 'newsletter_manager_factory'
)->setFactoryMethod(
- 'get'
+ 'createNewsletterManager'
);