Symfony2 FOSUserBundle: ПОВТОРНО отправьте электронное письмо с подтверждением регистрации
Фреймворк PHP: Symfony2.6
Проблема: Я хотел бы добавить в FOSUserBundle следующую функциональность: "Администратор может повторно отправить электронное письмо с подтверждением регистрации конкретному пользователю" (в разделе администратора веб-сайта).
Я уже создал страницу "Сведения о пользователе", где администратор может видеть всю информацию, введенную в регистрационную форму, и если пользователь включен/подтвержден. Если пользователь не включен, я добавлю кнопку для повторной отправки подтверждения электронная почта.
Другим решением является отображение ссылки на пользователя после того, как он попытается войти в систему с не подтвержденными учетными данными. Вот аналогичный вопрос (который, к сожалению, не имеет обратной связи, и он мне не очень понятен и охватывает только второй подход):
https://stackoverflow.com/questions/25204877/re-sending-confirmation-email-fosuserbundleНе могли бы вы, пожалуйста, указать мне на самое простое и быстрое решение?
2 answers
Я знаю, что это старый вопрос, но сегодня я столкнулся с той же проблемой и нашел более простое решение. Может быть, это также полезно для других:
Просто попросите FOSUserBundle
указать его mailer
и используйте его для повторной отправки сообщения:
$mailer = $this->get('fos_user.mailer');
$mailer->sendConfirmationEmailMessage($user);
Вот и все! Это приведет к повторной отправке точной копии письма с подтверждением, так как используется тот же код FOSUserBundle
. Нет необходимости вручную воссоздавать сообщение.
Вот пример того, что для этого нужно. Предположения:
- в
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>