0

我希望有人可以帮助解决这个问题。有一次我以为我有这个工作,但不知道为什么没有。

下面的脚本除了包含 Zend_Json::encode 之外,什么都做。它将用户保存在数据库中,并通过电子邮件向该人发送链接,但是该链接不包含加密。

感谢您的帮助!

    public function contribjoinAction() 
{
    $request = $this->getRequest();

    $conn = XXX_Db_Connection::factory()->getMasterConnection();
    $userDao = XXX_Model_Dao_Factory::getInstance()->setModule('core')->getUserDao();
    $userDao->setDbConnection($conn);   

    if ($request->isPost()) {
        $fullname  = $request->getPost('full_name');
        $username  = $request->getPost('username');
        $password  = $request->getPost('password');
        $password2 = $request->getPost('confirmPassword');
        $email     = $request->getPost('email');
        $islegal   = $request->getPost('islegal');

        $user = new Core_Models_User(array(
            'user_name'      => $username,
            'password'       => $password,
            'full_name'      => $fullname,
            'email'          => $email,
            'is_active'      => 0,
            'created_date'   => date('Y-m-d H:i:s'),
            'logged_in_date' => null,
            'is_online'      => 0,
            'role_id'        => 2,
            'islegal'        => $islegal,
        ));
        $id = $userDao->add($user);

        $templateDao = XXX_Model_Dao_Factory::getInstance()->setModule('mail')->getTemplateDao();
            $templateDao->setDbConnection($conn);
            $template = $templateDao->getByName(Mail_Models_Template::TEMPLATE_ACTIVATE_CONTRIBUTOR);

            if ($template == null) {
                $message = sprintf($this->view->translator('auth_mail_template_not_found'), Mail_Models_Template::TEMPLATE_ACTIVATE_CONTRIBUTOR);
                throw new Exception($message);
            }

            $search  = array(Mail_Models_Mail::MAIL_VARIABLE_EMAIL, Mail_Models_Mail::MAIL_VARIABLE_USERNAME);
            $replace = array($user->email, $user->user_name);
            $subject = str_replace($search, $replace, $template->subject);
            $content = str_replace($search, $replace, $template->body);

            /**
             * Replace the reset password link
             * @TODO: Add security key?
             */


            $encodedLink = array(
                'email' => $email, 
                'user_name' => $username,
            );

            $encodedLink = base64_encode(urlencode(Zend_Json::encode($encodedLink)));
            $link        = $this->view->serverUrl() . $this->view->url(array('encoded_link' => $encodedLink), 'core_user_emailactivate');
            $content     = str_replace('%activate_link%', $link, $content);

            /**
             * Get mail transport instance
             */
            $transport = Mail_Services_Mailer::getMailTransport();

            $mail = new Zend_Mail();
            $mail->setFrom($template->from_mail, $template->from_name)                  
                ->addTo($user->email, $user->user_name)
                ->setSubject($subject)
                ->setBodyHtml($content)
                ->send($transport);
        if ($id > 0) {
            $this->_helper->getHelper('FlashMessenger')
                ->addMessage($this->view->translator('user_join_success'));
            $this->_redirect($this->view->serverUrl() . $this->view->url(array(), 'core_user_contribjoin'));
        }
    }
}
4

1 回答 1

0

我发现了错误。我不知何故没有将变量 encoded_link 放入路由下该模块的 .ini 文件中。

于 2013-10-17T12:57:23.967 回答