Service Method Calls and Setter Injection

Version: 3.2
Edit this page

Warning: You are browsing the documentation for version 3.2 which is not maintained anymore.

If some of your projects are still using this version, consider upgrading.

Service Method Calls and Setter Injection

Usually, you'll want to inject your dependencies via the constructor. But sometimes, especially if a dependency is optional, you may want to use "setter injection". For example:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
namespace AppBundle\Service;

use Psr\Log\LoggerInterface;

class MessageGenerator
{
    private $logger;

    public function setLogger(LoggerInterface $logger)
    {
        $this->logger = $logger;
    }

    // ...
}

To configure the container to call the setLogger method, use the calls key:

  • YAML
  • XML
  • PHP
1
2
3
4
5
6
7
8
# app/config/services.yml
services:
    app.message_generator:
        # ...
        calls:
            - method: setLogger
              arguments:
                  - '@logger'
This work, including the code samples, is licensed under a Creative Commons BY-SA 3.0 license.