Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to give container as argument to services

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?

like image 549
whitebear Avatar asked Jun 15 '13 17:06

whitebear


2 Answers

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 ] ] 
like image 145
bigmax Avatar answered Sep 30 '22 01:09

bigmax


Add:

<argument type="service" id="service_container" /> 

And in your listener class:

use Symfony\Component\DependencyInjection\ContainerInterface;  //...  public function __construct(ContainerInterface $container, ...) { 
like image 29
Sybio Avatar answered Sep 30 '22 02:09

Sybio