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