Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
430 views
in Technique[技术] by (71.8m points)

php - 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="AcmeMemberBundleEventListenerCalendarEventListener">
        <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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

It's easy, if service extends ContainerAware

use SymfonyComponentDependencyInjectionContainerAware;

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 ] ]

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...