2

我希望我能找到可以为我回答问题的人。我是 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');
        }
    }
}
4

1 回答 1

3

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

同样重要的是要注意,这不适用于pre_controller钩子,因为 CodeIgniter 对象尚不可用。钩子必须是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'
);
于 2013-08-15T19:57:07.653 回答