Symfony Fosuserbundle переслать письмо - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь создать ссылку, которая отправляет пользователю токен подтверждения после регистрации в Symfony3.

Однако я получаю сообщение об устаревании следующим образом:

Пользователь устарел: служба "fos_user.mailer" является частной. из контейнера устарела начиная с Symfony 3.2 и завершится с ошибкой 4.0. Вам следует либо сделать службу общедоступной, либо прекратить использование контейнера напрямую и использовать вместо этого внедрение зависимостей.

Вот мой контроллер:

public function resendActivationEmail($token, UserManagerInterface $userManager)
{
    $user = $userManager->findUserByConfirmationToken($token);
    if (is_null($user)) {return $this->redirectToRoute('fos_user_registration_register');}
    $mailer = $this->get('fos_user.mailer');
    $mailer->sendConfirmationEmailMessage($user);
    return $this->redirectToRoute('fos_user_registration_check_email');
}

My services.yml:

services:
    # default configuration for services in *this* file
    _defaults:
        autowire: truesubscribers, etc.
        autoconfigure: true
        public: false

Я посмотрел документы, там написано, что в Symfony3.4 сервисы по умолчанию являются частными. Я использую автопроводку в своем приложении, так как же получить fos_user.mailer без предупреждений об устаревании?

Я пытался настроить общедоступные службы Fosuserbundle, не помогает:

services.yml

    ....
    FOS\UserBundle:
            public: true

Любая помощь приветствуется!

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Лучше использовать DependencyInjection, а не вызывать контейнер напрямую. Вы должны передать свой почтовый по вашему методу:

public function resendActivationEmail($token, UserManagerInterface $userManager, \FOS\UserBundle\Mailer\MailerInterface $mailer)
{
    $user = $userManager->findUserByConfirmationToken($token);
    if (is_null($user)) {return $this->redirectToRoute('fos_user_registration_register');}
    $mailer->sendConfirmationEmailMessage($user);
    return $this->redirectToRoute('fos_user_registration_check_email');
}

Для получения дополнительной информации о зависимостяхInjection: https://symfony.com/doc/3.4/service_container/injection_types.html

0 голосов
/ 11 мая 2018

Использование $mailer = $this->container->get('fos_user.mailer');

вместо $mailer = $this->get('fos_user.mailer');

...