I have a part of code where I\'m injecting two services $checker
and $paginator
by dependency injection. It works perfectly:
public
You need to add your dependencies so the service locator can find them.
Add a method getSubscribedServices()
to your controller class:
public static function getSubscribedServices()
{
return array_merge(
parent::getSubscribedServices(),
[
'checker' => Checker::class,
]
);
}
If your controller class extends AbstractController
you can simply do:
$this->get('checker');
If you want to do it in another type of class (e.g. a service that doesn't extend AbstractController
), then you need to declare that your service implements the ServiceSubscriberInterface
.
use Symfony\Contracts\Service\ServiceSubscriberInterface;
use Psr\Container\ContainerInterface;
class FooService implements ServiceSubscriberInterface {
public function __construct(ContainerInterface $locator)
{
$this->locator = $locator;
}
public static function getSubscribedServices() { /* same as before */ }
public function get($service)
{
return $this->locator->get($service);
}
}
... and you would be able to do the same than you in the controller earlier.