2014-12-04 3 views
0

У меня проблема, как этот я получил услугу впрыснуть доктрину и использовать диспетчер сущностей для вставки записи пользователя в базу данных: UsersService.phpКак позвонить в другие службы Symfony?

И я получил услугу для отправки по электронной почте: MyEmailService.php

Все обе услуги, введенные в services.yml (следуйте этим документам http://symfony.com/doc/current/book/service_container.html). Все они отлично работают.

Итак, теперь моя проблема: у меня есть вызов класса UserFacade.php (не распространяется на любой контроллер). Он имеет метод «addUser». В этой функции он вызывается в UserService.php для вставки записи в базу данных, а затем вызывает MyEmailService.php для отправки электронной почты по электронной почте пользователя. Как я могу сделать это в Symphony? Я новичок с набором в Symphony.

Пожалуйста, помогите Спасибо

+0

Вы пробовали включить сам класс в контроллер? –

+0

Да @MikeAnte. Моя проблема в том, как я могу позвонить менеджеру доктрины из UserService? Затем вызовите UserService из UserFacade – user1597721

ответ

1

Сначала вы должны declare your dependencies in the constructor класса 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] 

И затем используйте фасад в вашем контроллере:

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

Вы должны зарегистрировать класс UserFacade как сервис, впрыснуть в него UserService (и MyEmailService). Затем вызовите UserService и MyEmailService от службы UserFacade как свойство:

$this->userService-><methid> 
// and so on 
Смежные вопросы