控制器帮助和功能

时间:2012-02-19 22:56:56

标签: php codeigniter controller

我有一个通用create函数将新用户提交给数据库 - 这很好用。我被困的地方如下。

  • 我知道我需要注册的用户在帐户登录之前点击了电子邮件中的链接。 运行创建功能时如何将其实现到我的 if statement

  • 我对如何设置我的错误感到有点困惑,如果有任何事情与激活过程有关或错误,我当前使用$this->form_validation->set_message();设置了消息。 我需要使用set_flashdata();?以及如何将这些回应到视图中?

当我create新用户时,默认情况下userActive字段设置为0,默认组设置为users

控制器:

   <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Users extends CI_Controller {


    public function index()
    {
        $data['companyName'] = $this->core_model->companyDetails()->coreCompanyName;
        $data['pageTitle'] = "Create User";
        $this->load->view('frontend/assets/header', $data);
        $this->load->view('frontend/users', $data);
        $this->load->view('frontend/assets/footer');
    }

    public function create(){   

        //If form validation fails load previous page with errors else do the job and insert data into db

        if($this->form_validation->run('createUser') == FALSE)
        {
            $data['success'] = "";
        }else{
            $username = $this->input->post('userName');
            $password = $this->input->post('userPassword');
            $firstname = $this->input->post('userFirstName');
            $lastname = $this->input->post('userLastName');
            $email = $this->input->post('userEmail');

            $passwordHash = $this->encrypt->sha1($password); // Lets encrypt the password why sha1?  MD5 is for tossers

            $activateCode = $this->_activateCode(10);

            // If the data is correct follow through with db insert

            if($this->users_model->createUser($username,$passwordHash,$firstname,$lastname,$email,$activateCode))
            {
                $data['success'] = TRUE;

                redirect('frontend/users/create','refresh');

            }

        }
        $data['companyName'] = $this->core_model->companyDetails()->coreCompanyName;
        $data['pageTitle'] = "Create User";
        $this->load->view('frontend/assets/header', $data);
        $this->load->view('frontend/user_create', $data);
        $this->load->view('admin/assets/footer');

        echo get_class($this);
        var_dump(method_exists($this, '_activateCode'));
    }

    function _userRegEmail($activateCode,$email,$firstname,$lastname){
        $data['companyName'] = $this->core_model->companyDetails()->coreCompanyName;
        $data['companyEmail'] = $this->core_model->companyDetails()->coreCompanyEmail;
        $data['companyContact'] = $this->core_model->companyDetails()->coreContactName;
        $data['firstName'] = $firstName;
        $data['lastName'] = $lastname;
        $data['email'] = $email;
        $data['activateCode'] = $activateCode;

        $this->email->from($this->core_model->companyDetails()->coreCompanyEmail, $this->core_model->companyDetails()->coreCompanyName);
        $this->email->to($email);
        $this->email->subject($this->core_model->companyDetails()->coreCompanyName, 'User Registration Confirmation');

        $messageContent= $this->load->view('email_templates/userReg','', TRUE);

        $this->email->message($messageContent);

        //$this->email->send();
    }

    function usersconfirm(){

        $activateCode = $this->uri->segment(3);

        if($activateCode == '')
        {
            $this->form_validation->set_message('userConfirmError', 'Sorry you did not have a correct Activation Code.');
        }
            $userConfirmed = $this->users_model->confirm_user($activateCode);

            if($userConfirmed){
                $this->form_validation->set_message('userConfirmed', 'Thanks your account is now active you may login!');
            }else{
                $this->form_validation->set_message('userRecord', 'I am sorry we do not have any details with that Activation Code');
            }
    }

     function _username_check($username)
    {
        if($this->users_model->username_taken($username))
        {
            $this->form_validation->set_message('username_check', 'Sorry the username %s is taken!');
            return FALSE;
        }else{
            return TRUE;
        }
    }

    function _email_check($email)
    {
        if($this->users_model->email_check($email))
        {
            $this->form_validation->set_message('email_check','Sorry there is already a user with this %s');
            return FALSE;
        }else{
            return TRUE;
        }

    }

   function _activateCode($length)
    {
        return random_string('alnum', $length);
    }

}

/* End of file users.php */
/* Location: ./application/controllers/users.php */

1 个答案:

答案 0 :(得分:0)

您可以通过检查if语句中的userActive数据库来确定用户是否已单击激活链接。

您可以使用闪存数据。您可以使用以下方法检索Flash数据 $this->session->flashdata('item');回应视图。

请参阅http://codeigniter.com/user_guide/libraries/sessions.html&gt;闪存数据