Symfony: как перевести письмо, отправленное switfmailer - PullRequest
0 голосов
/ 30 августа 2018

Я борюсь с SF4, чтобы сделать простую вещь, я думаю.

После регистрации пользователя я пытаюсь отправить электронное письмо в соответствии с языком пользователя (французским или английским).

С $ subject, текстами $ body, установленными в подписчике, я получаю письмо.

Теперь я хотел бы реализовать перевод для темы и тела.

Конечно, есть вещи, которые я не очень хорошо контролирую, но я попробовал то, что описано в SF doc здесь , и оно работает внутри контроллера, но не внутри моего подписчика.

У меня довольно четкие ошибки, которые я не понимаю :(

ошибка захвата

Какой-нибудь совет, чтобы вести меня, пожалуйста?

Я знаю, что для тела я мог бы сделать шаблон ветки, но не для темы письма.

Вот мой код подписчика: (Я раскомментирую то, что комментировал, когда я тестирую)

namespace App\EventSubscriber;

use App\Entity\User;
use App\Events;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\EventDispatcher\GenericEvent;
//use Symfony\Component\Translation\TranslatorInterface;

class RegistrationNotifySubscriber implements EventSubscriberInterface
{
    private $mailer;
    private $sender;

    public function __construct(\Swift_Mailer $mailer, $sender)
    {
        $this->mailer = $mailer;
        $this->sender = $sender;
    }

    public static function getSubscribedEvents(): array
    {
        return [
            Events::USER_REGISTERED => 'onUserRegistrated',
        ];
    }

    public function onUserRegistrated(GenericEvent $event)
    {
        /** @var User $user */
        $user = $event->getSubject();

        //$subject = $translator->trans('registration.email.subject', array(), 'messages'); -- , TranslatorInterface $translator
        $subject = "Your account for a product demonstration";
        $body = "Hello, Your account has been created...";

        $message = (new \Swift_Message())
            ->setSubject($subject)
            ->setTo($user->getUsername())
            ->setFrom($this->sender)
            ->setBody($body, 'text/html')
        ;

        $this->mailer->send($message);
    }
}   

Спасибо.

1028 * Fab *

1 Ответ

0 голосов
/ 30 августа 2018

Вам нужно ввести переводчик в ваш подписчик. Для этого вам нужно

  1. Принять его в качестве параметра в конструкторе подписчика
  2. Сообщите Symfony, что нужно передать его, отредактировав service.yml file
// # service.yml #
//AppBundle\EventSubscriber\RegistrationNotifySubscriber:
//        arguments: ['@translator', '@mailer']
//        public: true

use App\Entity\User;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\EventDispatcher\GenericEvent;
use Symfony\Component\Translation\TranslatorInterface;

class RegistrationNotifySubscriber implements EventSubscriberInterface
{
    private $mailer;
    private $sender;
    private $translator;

    public function __construct(TranslatorInterface $translator, \Swift_Mailer $mailer, $sender)
    {
        $this->mailer = $mailer;
        $this->sender = $sender;
        $this->translator = $translator;
    }

    public static function getSubscribedEvents(): array
    {
        return [
            Events::USER_REGISTERED => 'onUserRegistrated',
        ];
    }

    public function onUserRegistrated(GenericEvent $event)
    {
        /** @var User $user */
        $user = $event->getSubject();

        $subject = $this->translator->trans('registration.email.subject', array(), 'messages');
        $subject = "Your account for a product demonstration";
        $body = "Hello, Your account has been created...";

        $message = (new \Swift_Message())
            ->setSubject($subject)
            ->setTo($user->getUsername())
            ->setFrom($this->sender)
            ->setBody($body, 'text/html')
        ;

        $this->mailer->send($message);
    }
}
...