Skip to content

Commit 208e903

Browse files
committed
Merge branch '6.4' into 7.2
* 6.4: [DependencyInjection] Document the different types of service arguments
2 parents 638b849 + d75f662 commit 208e903

File tree

1 file changed

+121
-0
lines changed

1 file changed

+121
-0
lines changed

service_container.rst

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,127 @@ type-hints by running:
349349
350350
[...]
351351
352+
In addition to injecting services, you can also pass scalar values and collections
353+
as arguments of other services:
354+
355+
.. configuration-block::
356+
357+
.. code-block:: yaml
358+
359+
# config/services.yaml
360+
services:
361+
App\Service\SomeService:
362+
arguments:
363+
# string, numeric and boolean arguments can be passed "as is"
364+
- 'Foo'
365+
- true
366+
- 7
367+
- 3.14
368+
369+
# constants can be built-in, user-defined, or Enums
370+
- !php/const E_ALL
371+
- !php/const PDO::FETCH_NUM
372+
- !php/const Symfony\Component\HttpKernel\Kernel::VERSION
373+
- !php/const App\Config\SomeEnum::SomeCase
374+
375+
# when not using autowiring, you can pass service arguments explicitly
376+
- '@some-service-id' # the leading '@' tells this is a service ID, not a string
377+
- '@?some-service-id' # using '?' means to pass null if service doesn't exist
378+
379+
# binary contents are passed encoded as base64 strings
380+
- !!binary VGhpcyBpcyBhIEJlbGwgY2hhciAH
381+
382+
# collections (arrays) can include any type of argument
383+
-
384+
first: !php/const true
385+
second: 'Foo'
386+
387+
.. code-block:: xml
388+
389+
<!-- config/services.xml -->
390+
<?xml version="1.0" encoding="UTF-8" ?>
391+
<container xmlns="http://symfony.com/schema/dic/services"
392+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
393+
xmlns:framework="http://symfony.com/schema/dic/symfony"
394+
xsi:schemaLocation="http://symfony.com/schema/dic/services
395+
https://symfony.com/schema/dic/services/services-1.0.xsd
396+
http://symfony.com/schema/dic/symfony
397+
https://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
398+
399+
<services>
400+
<service id="App\Service\SomeService">
401+
<!-- arguments without a type can be strings or numbers -->
402+
<argument>Foo</argument>
403+
<argument>7</argument>
404+
<argument>3.14</argument>
405+
<!-- explicitly declare a string argument -->
406+
<argument type="string">Foo</argument>
407+
<!-- booleans are passed as constants -->
408+
<argument type="constant">true</argument>
409+
410+
<!-- constants can be built-in, user-defined, or Enums -->
411+
<argument type="constant">E_ALL</argument>
412+
<argument type="constant">PDO::FETCH_NUM</argument>
413+
<argument type="constant">Symfony\Component\HttpKernel\Kernel::VERSION</argument>
414+
<argument type="constant">App\Config\SomeEnum::SomeCase</argument>
415+
416+
<!-- when not using autowiring, you can pass service arguments explicitly -->
417+
<argument type="service"
418+
id="some-service-id"
419+
on-invalid="dependency_injection-ignore"/>
420+
421+
<!-- binary contents are passed encoded as base64 strings -->
422+
<argument type="binary">VGhpcyBpcyBhIEJlbGwgY2hhciAH</argument>
423+
424+
<!-- collections (arrays) can include any type of argument -->
425+
<argument type="collection">
426+
<argument key="first" type="constant">true</argument>
427+
<argument key="second" type="string">Foo</argument>
428+
</argument>
429+
</service>
430+
431+
<!-- ... -->
432+
</services>
433+
</container>
434+
435+
.. code-block:: php
436+
437+
// config/services.php
438+
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
439+
440+
use Symfony\Component\DependencyInjection\ContainerInterface;
441+
use Symfony\Component\DependencyInjection\Reference;
442+
443+
return static function (ContainerConfigurator $container) {
444+
$services = $container->services();
445+
446+
$services->set(App\Service\SomeService::class)
447+
// string, numeric and boolean arguments can be passed "as is"
448+
->arg(0, 'Foo')
449+
->arg(1, true)
450+
->arg(2, 7)
451+
->arg(3, 3.14)
452+
453+
// constants: built-in, user-defined, or Enums
454+
->arg(4, E_ALL)
455+
->arg(5, \PDO::FETCH_NUM)
456+
->arg(6, Symfony\Component\HttpKernel\Kernel::VERSION)
457+
->arg(7, App\Config\SomeEnum::SomeCase)
458+
459+
// when not using autowiring, you can pass service arguments explicitly
460+
->arg(8, service('some-service-id')) # fails if service doesn't exist
461+
# passes null if service doesn't exist
462+
->arg(9, new Reference('some-service-id', Reference::IGNORE_ON_INVALID_REFERENCE))
463+
464+
// collection with mixed argument types
465+
->arg(10, [
466+
'first' => true,
467+
'second' => 'Foo',
468+
]);
469+
470+
// ...
471+
};
472+
352473
Handling Multiple Services
353474
~~~~~~~~~~~~~~~~~~~~~~~~~~
354475

0 commit comments

Comments
 (0)