Skip to content

Commit 0de578b

Browse files
committed
document ServiceSubscriberTrait
1 parent 40b2067 commit 0de578b

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

service_container/service_subscribers_locators.rst

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,3 +368,47 @@ Now you can use the service locator by injecting it in any other service:
368368
better to create and inject it as an anonymous service.
369369

370370
.. _`Command pattern`: https://en.wikipedia.org/wiki/Command_pattern
371+
372+
Service Subscriber Trait
373+
------------------------
374+
375+
.. versionadded:: 4.2
376+
The :class:`Symfony\\Component\\DependencyInjection\\ServiceSubscriberTrait`
377+
was introduced in Symfony 4.2.
378+
379+
The :class:`Symfony\\Component\\DependencyInjection\\ServiceSubscriberTrait`
380+
provides an implementation for
381+
:class:`Symfony\\Component\\DependencyInjection\\ServiceSubscriberInterface`
382+
that looks through all methods in your class that have no arguments and a return
383+
type. It provides a ``ServiceLocator`` for the services of those return types.
384+
The service id is ``__METHOD__``. This allows you to easily add dependencies
385+
to your services based on type-hinted helper methods::
386+
387+
// src/Service/MyService.php
388+
namespace App\Service;
389+
390+
use Psr\Log\LoggerInterface;
391+
use Symfony\Component\DependencyInjection\ServiceSubscriberInterface;
392+
use Symfony\Component\DependencyInjection\ServiceSubscriberTrait;
393+
use Symfony\Component\Routing\RouterInterface;
394+
395+
class MyService implements ServiceSubscriberInterface
396+
{
397+
use ServiceSubscriberTrait;
398+
399+
public function doSomething()
400+
{
401+
// $this->router() ...
402+
// $this->logger() ...
403+
}
404+
405+
private function router(): RouterInterface
406+
{
407+
return $this->container->get(__METHOD__);
408+
}
409+
410+
private function logger(): LoggerInterface
411+
{
412+
return $this->container->get(__METHOD__);
413+
}
414+
}

0 commit comments

Comments
 (0)