Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 2b58adb

Browse files
committed
feature #16516 Add documentation for using expressions as service factories (jvasseur)
This PR was merged into the 6.1 branch. Discussion ---------- Add documentation for using expressions as service factories Doc PR for symfony/symfony#45512 Commits ------- f8fc3d6 Add documentation for using expressions as service factories
2 parents 2710c37 + f8fc3d6 commit 2b58adb

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

service_container/expression_language.rst

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,3 +131,54 @@ via a ``container`` variable. Here's another example:
131131
132132
Expressions can be used in ``arguments``, ``properties``, as arguments with
133133
``configurator`` and as arguments to ``calls`` (method calls).
134+
135+
You can also use expressions as service factories:
136+
137+
.. configuration-block::
138+
139+
.. code-block:: yaml
140+
141+
# config/services.yaml
142+
services:
143+
App\Mailer:
144+
factory: "@=parameter('some_param') ? service('some_service') : arg(0)"
145+
arguments:
146+
- '@some_other_service'
147+
148+
.. code-block:: xml
149+
150+
<!-- config/services.xml -->
151+
<?xml version="1.0" encoding="UTF-8" ?>
152+
<container xmlns="http://symfony.com/schema/dic/services"
153+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
154+
xsi:schemaLocation="http://symfony.com/schema/dic/services
155+
https://symfony.com/schema/dic/services/services-1.0.xsd">
156+
157+
<services>
158+
<service id="App\Mailer">
159+
<factory expression="parameter('some_param') ? service('some_service') : arg(0)"/>
160+
<argument type="service" id="some_other_service"/>
161+
</service>
162+
</services>
163+
</container>
164+
165+
.. code-block:: php
166+
167+
// config/services.php
168+
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
169+
170+
use App\Mailer;
171+
172+
return function(ContainerConfigurator $configurator) {
173+
$services = $configurator->services();
174+
175+
$services->set(Mailer::class)
176+
->factory(expr("parameter('some_param') ? service('some_service') : arg(0)"))
177+
->args([service('some_other_service')]);
178+
};
179+
180+
In this context, you have access to the ``arg`` function that allows getting the value of arguments passed to the factory.
181+
182+
.. versionadded:: 6.1
183+
184+
Using expressions as factories was introduced in Symfony 6.1.

0 commit comments

Comments
 (0)