使用post_user_register事件更改用户组

时间:2014-03-07 21:10:29

标签: codeigniter pyrocms

我真的不明白事件在PyroCMS中是如何运作的。我想根据用户在注册期间选择的用户类型来更新用户角色。它与this post非常相似。因为我不明白事件是如何运作的,所以我不知道如何继续。这是我在用户模块文件夹中添加的事件类:

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

class Events_Users {

protected $ci;

public function __construct()
{
    $this->ci =& get_instance();


    Events::register('post_user_register', array($this, 'update_user_group'));
}

public function update_user_group($user_id)
{
    //loading the user model class
    $this->ci->load->model(array('users/user_m'));
    //getting the users details
    $user = $this->ci->user_m->get(array('id' => $user_id));
    //assigning the user type variable
    $user_type = $user->tell_us_who_you_are;
    $set =  array('group_id' => $user_type);        
    if($user_type == 'spectator')
    {
        //do nothing
    }else{
        //update user group
        $this->db->update('users',$set, array('id'=>$user_id));    
    }
}

}

1 个答案:

答案 0 :(得分:1)

Events::register('post_user_register', array($id, 'update_user_group'));

此行将自定义函数注册到事件中,当调用事件(此处为post_user_register)时,将触发您的函数(此处为update_user_group)。

您只需更改您的函数名称并传递将由事件触发器传递给它的user_id。

public function update_user_group($user_id)
    {
        // your logic
        //dump($user_id);die();
    }

请尝试使用您的events.php

的此代码
<?php defined('BASEPATH') OR exit('No direct script access allowed');

class Events_Users{

    protected $ci;

    public function __construct()
    {
        $this->ci =& get_instance();


        Events::register('post_user_register', array($this, 'update_user_group'));
    }

    public function update_user_group($user_id)
    {
        $this->db->update('users', array('group_id' => $this->input->post('user_type')), array('user_id'=>$user_id));    
    }
}