Я борюсь с 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);
}
}
Благодарю.
потрясающий
Вам нужно ввести переводчик в ваш подписчик. Для этого вам нужно
service.yml
файл// # 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);
}
}
Других решений пока нет …