10000 [DI] Document PHP-DSL service_closure() function · symfony/symfony-docs@1e40081 · GitHub
[go: up one dir, main page]

Skip to content

Commit 1e40081

Browse files
committed
[DI] Document PHP-DSL service_closure() function
1 parent 722e76e commit 1e40081

File tree

1 file changed

+23
-3
lines changed

1 file changed

+23
-3
lines changed

service_container/service_closures.rst

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,16 +77,36 @@ argument of type ``service_closure``:
7777
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
7878
7979
use App\Service\MyService;
80-
use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument;
81-
use Symfony\Component\DependencyInjection\Reference;
8280
8381
return function (ContainerConfigurator $configurator) {
8482
$services = $configurator->services();
8583
8684
$services->set(MyService::class)
87-
->args([new ServiceClosureArgument(new Reference('mailer'))]);
85+
->args([service_closure('mailer')]);
86+
87+
// In case the dependency is optional
88+
// $services->set(MyService::class)
89+
// ->args([service_closure('mailer')->ignoreOnInvalid()]);
8890
};
8991
9092
.. seealso::
9193

9294
Another way to inject services lazily is via a :doc:`service locators </service_container/service_subscribers_locators>`.
95+
96+
Using Service Closures in Compiler Passes
97+
-----------------------------------------
98+
99+
In :doc:`compiler passes </service_container/compiler_passes>` you can create
100+
a service closure by wrapping the service reference into an instance of
101+
:class:`Symfony\\Component\\DependencyInjection\\Argument\\ServiceClosureArgument`::
102+
103+
use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument;
104+
use Symfony\Component\DependencyInjection\ContainerBuilder;
105+
use Symfony\Component\DependencyInjection\Reference;
106+
107+
public function process(ContainerBuilder $container): void
108+
{
109+
// ...
110+
111+
$myService->addArgument(new ServiceClosureArgument(new Reference('mailer')));
112+
}

0 commit comments

Comments
 (0)
0