钩子和MY_Model

时间:2013-08-15 19:46:41

标签: php codeigniter

我希望能找到能为我回答问题的人。我是Jamie Rumbelow的MY_Model,很想知道如果我需要在钩子里面运行一个函数,我是否可以使用它。

$hook['pre_controller'] = array(
    'class'    => 'Logins_model',
    'function' => 'pre_init', // Run some sort of get function here
    'filename' => 'logins_model.php',
    'filepath' => 'models',
    //'params'   => array('beer', 'wine', 'snacks')
);

编辑2:你会说这是一个好的钩子还是我对此失去了所有的掌握?

<?php

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

class User_hook {

    private $CI;

    function __construct() {
        $CI =& get_instance();
    }

    public function validate_user() {
        $this->CI->load->model('logins_model', 'login'); //Alternatively put this in autoload.php
        $this->CI->load->model('users_model', 'user');

        $user_id = $this->CI->session->userdata('user_id');

        if (($user_id !== TRUE) && (!is_numeric($user_id)) && (strlen($user_id) < 5))
        {
            redirect('login');
        }

        $user_data = $this->CI->user->get($user_id);
        $user_data->login =  $this->CI->login->get_by('user_id', $user_id);

        if (empty($user_data))
        {
            redirect('login');
        }
    }
}

1 个答案:

答案 0 :(得分:3)

是的,但不使用您建议的代码。您需要创建自己的自定义钩子类,然后加载(或自动加载)并在那里调用您的模型。

同样重要的是要注意,由于CodeIgniter对象尚不可用,因此{em>不对pre_controller挂钩起作用。钩子必须是post_controller_constructor或更晚。以hooks/some_hook.php为例,以此钩子类为例。

class some_hook {

    private $CI;

    function __construct() {
        $CI =& get_instance();
    }

    public function some_function() {
        $this->CI->load->model('logins_model'); //Alternatively put this in autoload.php
        $this->CI->logins_model->some_function_in_logins();
    }
}

然后你将使用:

加载它
$hook['post_controller_constructor'] = array(
    'class'    => 'some_hook',
    'function' => 'some_function',
    'filename' => 'some_hook.php',
    'filepath' => 'hooks'
);