我正在尝试邀请用户登录我的后端系统。当使用用户的姓氏,名字,中间名,电子邮件和消息(可选)提交表单时,它应该发送一个唯一的链接到用户的电子邮件,让他们知道他们被邀请。单击链接后,它会将它们带到一个页面,在该页面中,他们可以为帐户创建用户名和密码(不需要此部分的帮助)。
查看文件:
{% extends '::base.html.twig' %}
{% block body %}
<div class="container">
<div class="row">
<div class="col-md-8">
<h1>Invite Teacher</h1>
</div>
</div>
<div class="row">
<div class="col-md-12">
{{ form_errors(newTeacherForm) }}
<form id="new_teacher_form" class="form-horizontal" role="form" action="{{ path('t60_cms_super_usermanagement_inviteteacher', {'account_id': account_id }) }}" method="post" {{ form_enctype(newTeacherForm) }}>
<div class="row" style="margin-top:50px;">
<div class="col-md-5">
{{ form_widget(newTeacherForm.lastname, {'id': 'inputTitle', 'attr': {'class': 'form-control', 'placeholder': 'Last Name'}}) }}
</div>
<div class="col-md-6">
{{ form_widget(newTeacherForm.firstname, {'id': 'inputTitle', 'attr': {'class': 'form-control', 'placeholder': 'First Name'}}) }}
</div>
<div class="col-md-1">
{{ form_widget(newTeacherForm.middleinitial, {'id': 'inputTitle', 'attr': {'class': 'form-control', 'placeholder': 'MI'}}) }}
</div>
</div>
<div class="row" style="margin-top:50px;">
<div class="col-md-12">
{{ form_widget(newTeacherForm.email, {'id': 'inputTitle', 'attr': {'class': 'form-control', 'placeholder': 'Email'}}) }}
</div>
</div>
<hr/>
<div class="row" style="margin-top:50px;">
<div class="col-md-12">
{{ form_widget(newTeacherForm.lastname, {'id': 'inputTitle', 'attr': {'class': 'form-control', 'placeholder': 'Message (Optional)'}}) }}
</div>
</div>
{{ form_rest(newTeacherForm) }}
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default pull-left" data-dismiss="modal">Back</button>
<button type="submit" class="btn btn-default">Invite Teacher</button>
</div>
</form>
</div>
</div>
</div>
{% endblock body %}
ROUTE:
t60_cms_super_usermanagement_inviteteacher:
pattern: /cms/usermanagement/invteacher/{account_id}
defaults: { _controller:Think60SiteBundle:SuperAdmin:inviteTeacher }
控制器:
public function inviteTeacherAction($account_id)
{
$em = $this->getDoctrine()->getManager();
$repos = $em->getRepository('Think60SiteBundle:Account');
$query = $repos->createQueryBuilder('p')
->where('p.id = :account_id')
->setParameter('account_id', $account_id)
->getQuery();
$account = $query->getSingleResult();
$newTeacherForm = $this->createFormBuilder()
->add('lastname', 'text')
->add('firstname', 'text')
->add('middleinitial', 'text')
->add('email', 'email')
->getForm();
if($newTeacherForm->isValid()){
$message = \Swift_Message::newInstance()
->setSubject('Your Invited To Join Think60')
->setFrom('send@example.com')
->setTo('recipient@example.com')
->setBody(
$this->renderView(
'Think60SiteBundle:SuperAdmin:email.txt.twig',
array('name' => $name)
));
$this->get('mailer')->send($message);
}
return $this->render('Think60SiteBundle:SuperAdmin:inviteteacher.html.twig', array(
'newTeacherForm' => $newTeacherForm->createView(),
'account_id' => $account_id,
));
}
我知道控制器在多个位置可能是错误的,因为我不是100%这是如何工作的。所以它处于不稳定的状态。但提前感谢您的帮助。
答案 0 :(得分:0)
有多种方法可以解决这个问题。但我认为最简单的方法是创建一个&#34;邀请&#34;包含唯一且不可猜测的ID的实体,以及受邀用户的电子邮件地址。
邀请链接包含邀请ID作为网址的一部分(例如/ join / 37d2e90ab3)。如果用户调用此URL,请将id放入其会话中。
仅当会话包含有效的邀请ID时才可以注册。注册成功后,从会话中删除ID并删除邀请实体(或将其标记为已使用)。