How to give container as argument to services

whitebear picture whitebear · Jun 15, 2013 · Viewed 49k times · Source

in my services constructor

public function __construct(
        EntityManager $entityManager,
        SecurityContextInterface $securityContext)
{
     $this->securityContext = $securityContext;
    $this->entityManager = $entityManager;

I pass entityManager and securityContext as argument. also my services.xml is here

    <service id="acme.memberbundle.calendar_listener" class="Acme\MemberBundle\EventListener\CalendarEventListener">
        <argument type="service" id="doctrine.orm.entity_manager" />
        <argument type="service" id="security.context" />

but now,I want to use container in services such as

$this->container->get('router')->generate('fos_user_profile_edit') 

how can I pass the container to services?

Answer

bigmax picture bigmax · Jun 15, 2013

It's easy, if service extends ContainerAware

use \Symfony\Component\DependencyInjection\ContainerAware;

class YouService extends ContainerAware
{
    public function someMethod() 
    {
        $this->container->get('router')->generate('fos_user_profile_edit') 
        ...
    }
}

service.yml

  your.service:
      class: App\...\YouService
      calls:
          - [ setContainer,[ @service_container ] ]