Skip to content

Updates to DI config for 3.3 #7807

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 23 commits into from
May 5, 2017
Merged
Changes from 1 commit
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
8433fc1
[WIP] Updates to DI config for 3.3
weaverryan Apr 15, 2017
2d11347
more tweaks
weaverryan Apr 28, 2017
105801c
adding note about autoconfigure
weaverryan Apr 28, 2017
049df7d
Adding details and usages of fetching the service as a controller arg
weaverryan Apr 28, 2017
9e84572
last tweaks from feedback
weaverryan Apr 28, 2017
c45daf4
fixing build problem
weaverryan Apr 28, 2017
2636bea
bad link
weaverryan Apr 28, 2017
9ab27f0
Add xml files
GuilhemN Apr 28, 2017
0e48bd8
[WIP] Updates to DI config for 3.3
weaverryan Apr 15, 2017
6e6ed94
more tweaks
weaverryan Apr 28, 2017
70178d1
adding note about autoconfigure
weaverryan Apr 28, 2017
45500b3
Adding details and usages of fetching the service as a controller arg
weaverryan Apr 28, 2017
759e9b2
last tweaks from feedback
weaverryan Apr 28, 2017
6de83e2
fixing build problem
weaverryan Apr 28, 2017
89e12de
bad link
weaverryan Apr 28, 2017
443aec2
Merge pull request #7857 from GuilhemN/patch-1
weaverryan May 2, 2017
bc7088d
Merge remote-tracking branch 'origin/di-3.3-changes' into di-3.3-changes
weaverryan May 2, 2017
ee27765
Adding versionadded
weaverryan May 2, 2017
5452c61
Adding section about public: false
weaverryan May 2, 2017
2229fd3
Merge remote-tracking branch 'origin/master' into di-3.3-changes
weaverryan May 2, 2017
cac3c6c
Merge remote-tracking branch 'origin/master' into di-3.3-changes
weaverryan May 5, 2017
12c4944
Tweaks after amazing review from @GuilhemN and @xabbuh
weaverryan May 5, 2017
22adfbd
removing duplicate target
weaverryan May 5, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
adding note about autoconfigure
  • Loading branch information
weaverryan committed Apr 28, 2017
commit 105801c521eb71e8640402abb2c46198007d338c
65 changes: 65 additions & 0 deletions service_container.rst
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,7 @@ the service container *how* to instantiate it:

# app/config/services.yml
services:
# default configuration for services in *this* file
_defaults:
autowire: true
autoconfigure: true
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this isn't merged yet - symfony/symfony#22234 - but has all the 👍 so I expect it will

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd encourage adding public: false also

Expand Down Expand Up @@ -510,6 +511,70 @@ service whose id is ``monolog.logger.request``.
the *service* whose id is ``monolog.logger.request``, and not just the *string*
``monolog.logger.request``.

The autoconfigure Option
------------------------

Above, we've set ``autoconfigure: true`` in the ``_defaults`` section so that it
applies to all services defined in that file. With this setting, the container will
automatically apply certain configuration to your services, based on your service's
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

configurations? or a certain configuration?

*class*. The is mostly used to *auto-tag* your services.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This


For example, to create a Twig Extension, you need to create a class, register it
as a service, and :doc:`tag </tags>` it with ``twig.extension``:

.. configuration-block::

.. code-block:: yaml

# app/config/services.yml
services:
# ...

AppBundle\Twig\MyTwigExtension:
tags: [twig.extension]

.. code-block:: xml

<!-- app/config/services.xml -->
TODO
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

        <?xml version="1.0" encoding="UTF-8" ?>
        <container xmlns="http://symfony.com/schema/dic/services"
            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">

            <services>
                <!-- ... -->

                <service id="AppBundle\Twig\MyTwigExtension">
                    <tag name="twig.extension" />
                </service>
            </services>
        </container>


.. code-block:: php

// app/config/services.php
TODO

But, with ``autoconfigure: true``, you don't need the tag. In fact, all you need
is this:

.. configuration-block::

.. code-block:: yaml

# app/config/services.yml
services:
_defaults:
autowire: true
autoconfigure: true

# load your service from the Twig directory
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

load your services?

AppBundle\:
resource: '../../src/AppBundle/{Service,EventDispatcher,Twig,Form}'

.. code-block:: xml

<!-- app/config/services.xml -->
TODO
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

        <?xml version="1.0" encoding="UTF-8" ?>
        <container xmlns="http://symfony.com/schema/dic/services"
            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">

            <services>
                <defaults autowire="true" autoconfigure="true" />

                <!-- Load your services-->
                <prototype namespace="AppBundle\" resource="../../src/AppBundle/{Service,EventDispatcher,Twig,Form}" />
            </services>
        </container>


.. code-block:: php

// app/config/services.php
TODO

That's it! The container will find your class in the ``Twig/`` directory and register
it as a service. Then ``autoconfigure`` will add the ``twig.extension`` tag *for*
you, because your class implements ``Twig_ExtensionInterface``. And thanks to ``autowire``,
you can even add ``__construct()`` arguments without any configuration.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

constructor arguments?


Learn more
----------

Expand Down