Symfony2 FosuserBundle: повторно отправить подтверждение регистрации по электронной почте

PHP-фреймворками: на Symfony2.6

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

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


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

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

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

2 ответов


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

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

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

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


вот это выстрел в то, что он принимает. Предположения:

  • на 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('admin@acmedemo.com')
                    ->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.шаблон Twig

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

минималистский AcmeDemoBundle: напомнить: электронная почта.формат html.шаблон Twig

Please confirm your registration by visiting <a href="{{ confirmationUrl }}">this link</a>