Skip to content

Commit d902086

Browse files
committed
Merge branch '7.4' into 8.0
* 7.4: [DependencyInjection] Document the different types of service arguments
2 parents 3063a75 + 9ceba53 commit d902086

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
@@ -382,6 +382,127 @@ type-hints by running:
382382
383383
[...]
384384
385+
In addition to injecting services, you can also pass scalar values and collections
386+
as arguments of other services:
387+
388+
.. configuration-block::
389+
390+
.. code-block:: yaml
391+
392+
# config/services.yaml
393+
services:
394+
App\Service\SomeService:
395+
arguments:
396+
# string, numeric and boolean arguments can be passed "as is"
397+
- 'Foo'
398+
- true
399+
- 7
400+
- 3.14
401+
402+
# constants can be built-in, user-defined, or Enums
403+
- !php/const E_ALL
404+
- !php/const PDO::FETCH_NUM
405+
- !php/const Symfony\Component\HttpKernel\Kernel::VERSION
406+
- !php/const App\Config\SomeEnum::SomeCase
407+
408+
# when not using autowiring, you can pass service arguments explicitly
409+
- '@some-service-id' # the leading '@' tells this is a service ID, not a string
410+
- '@?some-service-id' # using '?' means to pass null if service doesn't exist
411+
412+
# binary contents are passed encoded as base64 strings
413+
- !!binary VGhpcyBpcyBhIEJlbGwgY2hhciAH
414+
415+
# collections (arrays) can include any type of argument
416+
-
417+
first: !php/const true
418+
second: 'Foo'
419+
420+
.. code-block:: xml
421+
422+
<!-- config/services.xml -->
423+
<?xml version="1.0" encoding="UTF-8" ?>
424+
<container xmlns="http://symfony.com/schema/dic/services"
425+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
426+
xmlns:framework="http://symfony.com/schema/dic/symfony"
427+
xsi:schemaLocation="http://symfony.com/schema/dic/services
428+
https://symfony.com/schema/dic/services/services-1.0.xsd
429+
http://symfony.com/schema/dic/symfony
430+
https://symfony.com/schema/dic/symfony/symfony-1.0.xsd">
431+
432+
<services>
433+
<service id="App\Service\SomeService">
434+
<!-- arguments without a type can be strings or numbers -->
435+
<argument>Foo</argument>
436+
<argument>7</argument>
437+
<argument>3.14</argument>
438+
<!-- explicitly declare a string argument -->
439+
<argument type="string">Foo</argument>
440+
<!-- booleans are passed as constants -->
441+
<argument type="constant">true</argument>
442+
443+
<!-- constants can be built-in, user-defined, or Enums -->
444+
<argument type="constant">E_ALL</argument>
445+
<argument type="constant">PDO::FETCH_NUM</argument>
446+
<argument type="constant">Symfony\Component\HttpKernel\Kernel::VERSION</argument>
447+
<argument type="constant">App\Config\SomeEnum::SomeCase</argument>
448+
449+
<!-- when not using autowiring, you can pass service arguments explicitly -->
450+
<argument type="service"
451+
id="some-service-id"
452+
on-invalid="dependency_injection-ignore"/>
453+
454+
<!-- binary contents are passed encoded as base64 strings -->
455+
<argument type="binary">VGhpcyBpcyBhIEJlbGwgY2hhciAH</argument>
456+
457+
<!-- collections (arrays) can include any type of argument -->
458+
<argument type="collection">
459+
<argument key="first" type="constant">true</argument>
460+
<argument key="second" type="string">Foo</argument>
461+
</argument>
462+
</service>
463+
464+
<!-- ... -->
465+
</services>
466+
</container>
467+
468+
.. code-block:: php
469+
470+
// config/services.php
471+
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
472+
473+
use Symfony\Component\DependencyInjection\ContainerInterface;
474+
use Symfony\Component\DependencyInjection\Reference;
475+
476+
return static function (ContainerConfigurator $container) {
477+
$services = $container->services();
478+
479+
$services->set(App\Service\SomeService::class)
480+
// string, numeric and boolean arguments can be passed "as is"
481+
->arg(0, 'Foo')
482+
->arg(1, true)
483+
->arg(2, 7)
484+
->arg(3, 3.14)
485+
486+
// constants: built-in, user-defined, or Enums
487+
->arg(4, E_ALL)
488+
->arg(5, \PDO::FETCH_NUM)
489+
->arg(6, Symfony\Component\HttpKernel\Kernel::VERSION)
490+
->arg(7, App\Config\SomeEnum::SomeCase)
491+
492+
// when not using autowiring, you can pass service arguments explicitly
493+
->arg(8, service('some-service-id')) # fails if service doesn't exist
494+
# passes null if service doesn't exist
495+
->arg(9, new Reference('some-service-id', Reference::IGNORE_ON_INVALID_REFERENCE))
496+
497+
// collection with mixed argument types
498+
->arg(10, [
499+
'first' => true,
500+
'second' => 'Foo',
501+
]);
502+
503+
// ...
504+
};
505+
385506
Handling Multiple Services
386507
~~~~~~~~~~~~~~~~~~~~~~~~~~
387508

0 commit comments

Comments
 (0)