I am trying to use the logging service in another service in order to trouble shoot that service.
My config.yml looks like this:
services: userbundle_service: class: Main\UserBundle\Controller\UserBundleService arguments: [@security.context] log_handler: class: %monolog.handler.stream.class% arguments: [ %kernel.logs_dir%/%kernel.environment%.jini.log ] logger: 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?
The Symfony DependencyInjection component provides a standard way to instantiate objects and handle dependency management in your PHP applications. The heart of the DependencyInjection component is a container which holds all the available services in the application.
symfony2 service is not a singleton.
In Symfony, these useful objects are called services and each service lives inside a very special object called the service container. The container allows you to centralize the way objects are constructed. It makes your life easier, promotes a strong architecture and is super fast!
You pass service id as argument to constructor or setter of a service.
Assuming your other service is the userbundle_service
:
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; }
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() { $this->injectedService->doSomething(); }
And viola! You can access any function of the Injected Service!
// services.yml services: \AppBundle\Services\MainService: arguments: ['@injectedService']
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With