Skip to content

Commit 562d799

Browse files
committed
[DI] Document PHP-DSL service_closure() function
1 parent afa8a4f commit 562d799

File tree

1 file changed

+24
-3
lines changed

1 file changed

+24
-3
lines changed

service_container/service_closures.rst

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,33 @@ 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;
80+
use function Symfony\Component\DependencyInjection\Loader\Configurator\service_closure;
8281
8382
return function (ContainerConfigurator $configurator) {
8483
$services = $configurator->services();
8584
8685
$services->set(MyService::class)
87-
->args([new ServiceClosureArgument(new Reference('mailer'))]);
86+
->args([service_closure('mailer')]);
87+
88+
// In case the dependency is optional
89+
// $services->set(MyService::class)
90+
// ->args([service_closure('mailer')->nullOnInvalid()]);
8891
};
92+
93+
Using Service Closures in Compiler Passes
94+
-----------------------------------------
95+
96+
In :doc:`compiler passes </service_container/compiler_passes>` you can create
97+
a service closure by wrapping the service reference into an instance of
98+
:class:`Symfony\\Component\\DependencyInjection\\Argument\\ServiceClosureArgument`::
99+
100+
use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument;
101+
use Symfony\Component\DependencyInjection\ContainerBuilder;
102+
use Symfony\Component\DependencyInjection\Reference;
103+
104+
public function process(ContainerBuilder $container): void
105+
{
106+
// ...
107+
108+
$myService->addArgument(new ServiceClosureArgument(new Reference('mailer')));
109+
}

0 commit comments

Comments
 (0)