Symfony2 FOSUserBundle: ПОВТОРНО отправьте электронное письмо с подтверждением регистрации


Фреймворк PHP: Symfony2.6

Проблема: Я хотел бы добавить в FOSUserBundle следующую функциональность: "Администратор может повторно отправить электронное письмо с подтверждением регистрации конкретному пользователю" (в разделе администратора веб-сайта).

Я уже создал страницу "Сведения о пользователе", где администратор может видеть всю информацию, введенную в регистрационную форму, и если пользователь включен/подтвержден. Если пользователь не включен, я добавлю кнопку для повторной отправки подтверждения электронная почта.


Другим решением является отображение ссылки на пользователя после того, как он попытается войти в систему с не подтвержденными учетными данными. Вот аналогичный вопрос (который, к сожалению, не имеет обратной связи, и он мне не очень понятен и охватывает только второй подход):

https://stackoverflow.com/questions/25204877/re-sending-confirmation-email-fosuserbundle

Не могли бы вы, пожалуйста, указать мне на самое простое и быстрое решение?

Author: Community, 2015-01-03

2 answers

Я знаю, что это старый вопрос, но сегодня я столкнулся с той же проблемой и нашел более простое решение. Может быть, это также полезно для других:

Просто попросите FOSUserBundle указать его mailer и используйте его для повторной отправки сообщения:

$mailer = $this->get('fos_user.mailer');                    
$mailer->sendConfirmationEmailMessage($user);

Вот и все! Это приведет к повторной отправке точной копии письма с подтверждением, так как используется тот же код FOSUserBundle. Нет необходимости вручную воссоздавать сообщение.

 8
Author: Andrei Herford, 2016-12-14 08:18:35

Вот пример того, что для этого нужно. Предположения:

  • в config.yml, fos_user.service.mailer: fos_user.mailer.twig_swift
  • известен адрес электронной почты пользователя

Контроллер

/**
 * @Route("/remind")
 *
 */
    class RemindController extends Controller
    {
        /**
         * @Route("/{email}")
         * @Template()
         */
        public function remindAction($email)
        {
            $user = $this->get('fos_user.user_manager')->findUserByEmail($email);
            $url = $this->generateUrl('fos_user_registration_confirm', array('token' => $user->getConfirmationToken()), true);

            $message = \Swift_Message::newInstance()
                    ->setSubject('Registration confirmation')
                    ->setFrom('[email protected]')
                    ->setTo($email)
                    ->setContentType('text/html')
                    ->setBody(
                    $this->renderView(
                            "AcmeDemoBundle:Remind:email.html.twig", array(
                        'user' => $user,
                        'confirmationUrl' => $url))
                    )
            ;
            $sent = $this->get('mailer')->send($message);

            return ['user' => $user, 
                'url' => $url,
                'success' => $sent ? 'Yes' : 'No'];
        }
    }

Минималистский шаблон AcmeDemoBundle:Напомнить: напомнить.html.шаблон ветки

{{ user.email }}<br>
{{ url }}<br>
{{ success }}

Минималистский AcmeDemoBundle: Напомнить: шаблон email.html.twig

Please confirm your registration by visiting <a href="{{ confirmationUrl }}">this link</a>
 8
Author: geoB, 2015-01-03 22:31:31