我使用钩子来调用在调用控制器之前执行的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();
}
}
但我总是得到同样的错误
尝试获取非对象的属性
我知道有成千上万的答案,但直到现在我还没找到合适的答案。
答案 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
。
希望它对你有用。