Zend - > ZfcUser在电子邮件验证/激活后创建新用户

时间:2013-09-30 12:18:09

标签: email zend-framework registration zfcuser

我正在使用ZfcUser模块在一个已经有工作注册表的网站上工作。

然而, 我还需要能够通过我创建的管理页面创建用户。 它一步一步地是这样的: 管理员通过填写名字,姓氏和电子邮件来添加用户。 电子邮件将发送给用户。 用户单击验证链接并重定向到网站。 现在用户只需要输入他想要的密码就可以了。

如果可能的话,我怎么能做到这一点?

1 个答案:

答案 0 :(得分:2)

首先,我不确定什么是最好的方法,但我想到了一些。

我认为更容易在您的管理员中加载注册表单,记住您可以使用服务管理器从任何控制器加载它,例如

 $form = $sm->get('zfcuser_register_form');

然后您可以像处理任何表单一样使用它,将其发送到视图,等等。 您将拥有完整的注册表单,其中包含您在zfcuser.global.php中所需的所有字段,包括密码。我认为设置临时密码是好的,并让用户稍后更改它。在第一次密码更改之前,您也可以将其状态视为未经证实。

如果您不想要特定字段,可以使用任何形式将其删除,方法是

$form->remove('element_name'); 

您需要检查 ZfcUser \ Form \ Register

中的元素名称

另外,请记住,如果删除任何字段,则必须修改输入过滤器,否则验证将失败。为此,在模块的引导程序中,您应该附加一个事件监听器,如下所示:

$em = $e->getApplication ()->getEventManager ();
$em->attach ( 'ZfcUser\Form\RegisterFilter', 'init', function ($e) {

            $filter = $e->getTarget ();
                    //now modify the inputfilter as you need 
});

然后,您必须将邮件发送给用户。为此,我还将使用事件管理器,在您的引导程序中注册一个用户创建时的监听器,这是通过

        $sm = $e->getApplication ()->getServiceManager ();
    $zfcServiceEvents = $sm->get ( 'zfcuser_user_service' )->getEventManager ();


    $zfcServiceEvents->attach ( 'register.post', function ($e)  {
        $form = $e->getParam ( 'form' );
        $user = $e->getParam ( 'user' );
            //now you have all the info from the form and the already created user, so you can send the mail and whatever you need.

最后一步是让用户更改密码。为此,我会将他发送到您显示更改密码表单的模块,您可以使用以下方式检索:

$sm->get('zfcuser_change_password_form');

或直接将他发送到/ user / change-password 网址,该网址是zfc-user预定义的网址之一。

我认为这将是最干净的方式。

另一种方法

如果您不喜欢这种方式,您可以使用另一种方法,您创建自己的表单,填写它,将数据保存到临时表,发送邮件然后......用户来设置他的密码,你建立一个注册表单,预填充字段(并隐藏,将输入类型更改为隐藏,或通过CSS)并让他发送表单,所以他认为他只发送密码,实际上他正在发送所有的注册表格,从这里一切都像正常注册一样。

对于此解决方案,您还必须使用这些事件,但可能您需要查看注册事件,这是在发送表单时触发的,在用户发出之前保存在数据库中,因此您可以修改您可能需要的任何数据。

$zfcServiceEvents->attach ( 'register',  function ($e)  {
        $form = $e->getParam ( 'form' );

此外,您还应该查看已经提到过的init事件,您可以在向用户显示该表单之前检索该表单,并预先填充临时表中的任何数据。

$events->attach ( 'ZfcUser\Form\Register', 'init', function ($e)  {
            $form = $e->getTarget ();
//now you set form element values  from the temp table

可能这很令人困惑,但我希望你至少可以从哪里开始获取线索!

相关问题