是否可以使用钩子类中的库?

时间:2015-04-03 02:26:30

标签: php codeigniter codeigniter-hooks

我使用钩子来调用在调用控制器之前执行的Class。

$hook['pre_controller'] = array(
    'class' => 'CargarInformacion',
    'function' => 'obtenerInfo',
    'filename' => 'CargarInformacion.php',
    'filepath' => 'hooks',
    'params' => ''
    );

这是班级

class CargarInformacion 
{
    function obtenerInfo()
    {
        $ci = &get_instance();
        $informacion = $ci->db->get('sitio', 1)->row();
    }
}

但我总是得到同样的错误

  

尝试获取非对象的属性

我知道有成千上万的答案,但直到现在我还没找到合适的答案。

1 个答案:

答案 0 :(得分:1)

提供codeigniter doc,

  

pre_controller

     

在调用任何控制器之前立即调用。已经进行了所有基类,路由和安全检查   完成。

这就是为什么你不能在pre_controller钩子中访问CI superobject的引用。您可以通过这样做来测试它。

$hook['pre_controller'] = array(
    'class' => 'CargarInformacion',
    'function' => 'obtenerInfo',
    'filename' => 'CargarInformacion.php',
    'filepath' => 'hooks',
    'params' => 'pre'
);

$hook['post_controller_constructor'] = array(
    'class' => 'CargarInformation',
    'function' => 'obtenerInfo',
    'filename' => 'CargarInformation.php',
    'filepath' => 'hooks',
    'params' => 'post'
);

在CargarInformation.php中,

class CargarInformation  {
    function __construct($foo = null) {
        $this->CI =& get_instance();
    }

    function obtenerInfo($param)
    {
        echo $param;
        echo "<pre>";
        print_r($this->CI);
        echo "</pre>";
    }
}

因此,如果您希望在控制器调用的任何方法发生之前访问CI超级对象的引用,请尝试使用post_controller_constructor

希望它对你有用。