Symfony2 FosuserBundle:重新发送注册确认邮件
Symfony2 FosuserBundle: RE-send registration confirmation email
PHP框架:Symfony2.6
问题:我想为 FosUserBundle 添加以下功能:
"The admin can re-send the registration confirmation email to a specific user"(在网站的管理部分)。
我已经构建了 "user details" 页面,管理员可以在其中查看注册表中输入的所有信息以及用户是否 enabled/confirmed。如果用户未启用我将添加一个按钮以重新发送确认电子邮件。
另一种解决方案是在用户尝试使用未确认的凭据登录后向用户显示 link。这是一个类似的问题(不幸的是没有反馈,我也不是很清楚,只涵盖第二种方法):
你能告诉我最简单、最快捷的解决方案吗?
这是一个镜头,它需要什么。假设:
- 在
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:Remind:remind.html.twig模板
{{ user.email }}<br>
{{ url }}<br>
{{ success }}
极简主义AcmeDemoBundle:Remind:email.html.twig模板
Please confirm your registration by visiting <a href="{{ confirmationUrl }}">this link</a>
我知道这是一个老问题,但今天我遇到了同样的问题,我找到了一个更简单的解决方案。也许这对其他人也有帮助:
只需向 FOSUserBundle
询问其 mailer
并使用它重新发送消息:
$mailer = $this->get('fos_user.mailer');
$mailer->sendConfirmationEmailMessage($user);
就是这样!这将重新发送确认邮件的精确副本,因为使用了相同的 FOSUserBundle
代码。无需手动重新创建消息。
PHP框架:Symfony2.6
问题:我想为 FosUserBundle 添加以下功能: "The admin can re-send the registration confirmation email to a specific user"(在网站的管理部分)。
我已经构建了 "user details" 页面,管理员可以在其中查看注册表中输入的所有信息以及用户是否 enabled/confirmed。如果用户未启用我将添加一个按钮以重新发送确认电子邮件。
另一种解决方案是在用户尝试使用未确认的凭据登录后向用户显示 link。这是一个类似的问题(不幸的是没有反馈,我也不是很清楚,只涵盖第二种方法):
你能告诉我最简单、最快捷的解决方案吗?
这是一个镜头,它需要什么。假设:
- 在
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:Remind:remind.html.twig模板
{{ user.email }}<br>
{{ url }}<br>
{{ success }}
极简主义AcmeDemoBundle:Remind:email.html.twig模板
Please confirm your registration by visiting <a href="{{ confirmationUrl }}">this link</a>
我知道这是一个老问题,但今天我遇到了同样的问题,我找到了一个更简单的解决方案。也许这对其他人也有帮助:
只需向 FOSUserBundle
询问其 mailer
并使用它重新发送消息:
$mailer = $this->get('fos_user.mailer');
$mailer->sendConfirmationEmailMessage($user);
就是这样!这将重新发送确认邮件的精确副本,因为使用了相同的 FOSUserBundle
代码。无需手动重新创建消息。