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