2015-04-03 93 views
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(); 
    } 
} 

但我总是得到同样的错误

试图让非对象的属性

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

回答

1

随着笨文档提供,

pre_controller

立即调用之前,你的任何控制器被调用。所有基类,路由和安全检查已完成 。

这就是为什么你不能在pre_controller hook中访问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>"; 
    } 
} 

因此,尝试,如果你想获得访问CI超级的参考,但控制器的任何方法调用发生前使用post_controller_constructor代替。

希望它对你有用。