Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
CodeIgniter Ion Auth - set_hooks example
//this would probably be in a library or model
class activity
{
function add($type)
{
$this->db->insert('activity', array(
'type' => $type,
'datetime' => 'now()',
));
}
}
//set the hook
$this->ion_auth->set_hook('post_register', 'add_meta', 'activity', 'add', array('user_added'));
//other stuff...
//after this is called the hook will be executed automatically
$this->ion_auth->register(...

I keep getting the " Using $this when not in object context" error when trying to call the set_hook from my controller.
say i have something like this:

In Controller

$id = 1;
$update = array('email'=>'someone@nowhere.com','api_key'=>'1234test');
// set hook for update meta data
$this->ion_auth->set_hook('post_update_user', 'update_user_meta', 'users_model', 'update_meta', array($id,$update));                    
$this->ion_auth->update($id,$update);

Model

class Users_model extends CI_Model {

protected $meta_cols = array();
protected $tables = array();

function __construct() {
    parent::__construct();
    $this->meta_cols = $this->db->list_fields('meta');
    $this->tables = $this->db->list_tables();
    }

      function update_meta($user_id, array $data)
      {
          $update = array();
          if(is_array($data))
          {
             foreach($this->meta_cols as $cols)
             {
                 if(array_key_exists($cols, $data))
                 {
                     $update[$cols] = $data[$cols];
                 }
             }
          }

          return count($update) > 0 ? $this->db->where($this->tables['meta'].'.user_id',$user_id)->update($this->tables['meta'],$update) : FALSE;

      }

}

The script chokes on the "foreach($this->meta_cols as $cols)" line when called with the set_hook function.

Owner

benedmunds commented Jun 4, 2012

Change your controller to something like this, note the way the class is passed:

$id = 1;
$update = array('email'=>'someone@nowhere.com','api_key'=>'1234test');
// set hook for update meta data
$this->ion_auth->set_hook('post_update_user', 'update_user_meta', $this->users_model, 'update_meta', array($id,$update));                    
$this->ion_auth->update($id,$update);

thanks!

Is there a way to pass data into the event? I'm trying to create a hook for "post_account_creation_successful" for updating a MailChimp Mailing List, but I'm not sure how to obtain the user information from the event to pipe that to the MailChimp API.

thanks

Can I have the hooked method in one controller and set_hook() run from another controller?

Is there a way for me to pass data in the present ion-auth function into my own function? i want to hash both the activation code and the id found in the link sent to user's email addresses, in order to activate their account. Then inside the activate (inside ion-auth-model) i want to 'un-hash' it so that ion-auth flow can continue as normal..

Hello,@benedmunds
I can run your example. The data in the table is entered correctly.by:
$this->ion_auth->set_hook('post_register', 'add_meta', 'activity', 'add', array('user_added'));
But why does not the following command answer?
$this->ion_auth->set_hook('post_activate', 'add_meta', 'activity', 'add', array('user_added'));
And i reviewed the following. The correct operation is not done.

$this->ion_auth->set_hook(array('post_activate', 'post_activate_successful'), 'add_meta',  'activity', 'add', array('user_added'));
$this->ion_auth->set_hook('post_activate_successful', 'add_meta',  'activity', 'add', array('user_added'));

please guide me?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment