1

我正在使用挂钩来调用在调用控制器之前执行的类。

$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();
    }
}

但我总是得到同样的错误

试图获取非对象的属性

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

4

1 回答 1

1

作为提供的codeigniter doc,

预控制器

在调用任何控制器之前立即调用。所有基类、路由和安全检查都已完成。

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

$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>";
    }
}

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

希望它对你有用。

于 2015-04-03T06:04:47.807 回答