繁体   English   中英

如何在Symfony中呼叫另一个服务?

[英]How to call to another services in Symfony?

我遇到了这样的问题,我获得了一项服务,以注入理论并使用实体管理器将用户记录插入数据库:UsersService.php

而且我有一个发送电子邮件的服务:MyEmailService.php

所有这两个服务都注入了services.yml(遵循此文档http://symfony.com/doc/current/book/service_container.html )。 他们都工作正常。

所以现在我的问题是:我有一个类UserFacade.php( 不扩展任何控制器 )。 它具有方法“ addUser”。 在此功能中,它将调用UserService.php将记录插入数据库,然后调用MyEmailService.php将电子邮件发送到用户的电子邮件。 我该如何在Symphony中做到这一点? 我是Symphony中捆绑销售的新手。

请帮忙谢谢

首先,您必须在UserFacade类的构造函数声明依赖项。 这是允许symfony注入依赖项的一种方法:

class UserFacade 
{
    /** @var UserService */
    private $userService;

    /** @var EmailService */
    private $emailService;

    public function __construct(UserService $userService, MyEmailService $emailService) 
    {
        $this->userService = $userService;
        $this->emailService = $emailService;
    }

    public function addUser(User $user) 
    {
        $this->userService->add($user);
        $this->emailService->sendUserMail($user, ...);
    }
}

然后,您必须在service.yml中声明依赖项(假设您使用的是YAML,XML十分相似):

services:
    user_service:
        class:     UserService
        ...
    email_service: 
        class:     EmailService
        ...
    user_facade:
        class:     UserFacade
        arguments: [@user_service, @email_service]

然后在控制器中使用Facade:

class UserController 
{
    public function addUserAction(Request $request) 
    {
        // Do stuff with Request to populate the $user object
        $this->get('user_facade')->addUser($user);
    }
}

您必须将UserFacade类注册为服务,然后将其注入UserService(和MyEmailService)。 然后从UserFacade服务调用UserService和MyEmailService作为属性:

$this->userService-><methid>
// and so on

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM