neversaylate 发表于 2009-3-2 23:46:36

关于Hook中的问题

用的hook['pre_controller']:如下
$hook['pre_controller'][] = array(
'class' => 'Auth_filter',
'function' => 'before',
'filename' => 'Auth_filter.php',
'filepath' => 'hooks',
'params'   => array()
);

钩子是:
class Auth_filter
{
    function before($class = null, $method = null)
    {
      $obj =& get_instance();
      
      var_dump($obj);//结果是NULL
    }
}

这里不能用get_instance,谁能解决这个问题吗?

neversaylate 发表于 2009-3-3 09:40:29

自己顶一下。快来人说一下好吧。

Fanbin 发表于 2009-3-3 09:51:46

pre_controller 那时候控制器还没实例化
如果能在controller实例化之后处理的话就把挂钩点改成 post_controller_constructor 吧。

neversaylate 发表于 2009-3-3 10:12:39

用pre_controller是想在控制器之前对用户身份做验证。用的CI的Auth扩展。是按Auth的wiki上说的方式,确行不通。有那位用过Auth呢?帮忙说一下吧。搞了一天了。

erlang14 发表于 2009-3-3 10:21:52

从源码来看,你只好自己 $CI = new $class();了,其中$class是你的控制器类。

参见system/codeigniter/CodeIgniter.php 181-197行。

neversaylate 发表于 2009-3-3 13:46:40

没人用过pre_controller吗?继续等待......

erlang14 发表于 2009-3-4 10:45:00

其实pre_controller不是像你这么用的。

你如果需要用CI实例,使用post_controller_constructor这个hook才是正确的。这时候已经调用了控制器的构造函数,但是还没有调用控制器的具体方法。

xhui_cool 发表于 2009-3-4 18:50:17

说实话,不知道 构造控制器前调用钩子 和 构造完后调用 有什么区别,
总不能仅仅是多 初始化了一下,多做了一些操作而已

erlang14 发表于 2009-3-5 14:05:09

就是仅仅多做了一点操作。ci的封装很简单的,整个框架差不多都是用include建起来的。看完源码以后,对他的性能非常放心。

我也是在hook里做登录校验,用的就是前面说的post_controller_constructor。

xhui_cool 发表于 2009-3-5 18:12:39

就是仅仅多做了一点操作。ci的封装很简单的,整个框架差不多都是用include建起来的。看完源码以后,对他的性能非常放心。

我也是在hook里做登录校验,用的就是前面说的post_controller_constructor。 ...
erlang14 发表于 2009-3-5 14:05 http://codeigniter.org.cn/forums/images/common/back.gif

那你倒讲讲什么时候用pre_controller
页: [1]
查看完整版本: 关于Hook中的问题