php – How to inject a service in another service in Symfony?-ThrowExceptions

Exception or error:

I am trying to use the logging service in another service in order to trouble shoot that service.

My config.yml looks like this:

        class:        Main\UserBundle\Controller\UserBundleService
        arguments: [@security.context]

        arguments: [ %kernel.logs_dir%/%kernel.environment%.jini.log ]

        class: %monolog.logger.class%
        arguments: [ jini ]
        calls: [ [pushHandler, [@log_handler]] ]

This works fine in controllers etc. however I get no out put when I use it in other services.

Any tips?

How to solve:

You pass service id as argument to constructor or setter of a service.

Assuming your other service is the userbundle_service:

    class:        Main\UserBundle\Controller\UserBundleService
    arguments: [@security.context, @logger]

Now Logger is passed to UserBundleService constructor provided you properly update it, e.G.

protected $securityContext;
protected $logger;

public function __construct(SecurityContextInterface $securityContext, Logger $logger)
    $this->securityContext = $securityContext;
    $this->logger = $logger;


For Symfony 3.3, 4.x and above, the easiest solution is to use Dependency Injection

You can directly inject the service into another service, (say MainService)

// AppBundle/Services/MainService.php
// 'serviceName' is the service we want to inject
public function __construct(\AppBundle\Services\serviceName $injectedService)  {
    $this->injectedService = $injectedService;

Then simply, use the injected service in any method of the MainService as

// AppBundle/Services/MainService.php
public function mainServiceMethod() {

And viola! You can access any function of the Injected Service!

For older versions of Symfony where autowiring does not exist –

// services.yml
        arguments: ['@injectedService']


You can use the container in your service :

    class:        Main\UserBundle\Controller\UserBundleService
    arguments: [@security.context]

In your service :

use Symfony\Component\DependencyInjection\ContainerInterface;
class UserBundleService {
     * @var ContainerInterface
    private $_container;
    public function __construct(ContainerInterface $_container) {
        $this->_container = $_container;
    $var = $this->_container->get('logger');


Leave a Reply

Your email address will not be published. Required fields are marked *