[英]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.