用户
 找回密码
 入住 CI 中国社区
搜索
查看: 4356|回复: 9
收起左侧

关于Hook中的问题

[复制链接]
发表于 2009-3-2 23:46:36 | 显示全部楼层 |阅读模式
用的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,谁能解决这个问题吗?
 楼主| 发表于 2009-3-3 09:40:29 | 显示全部楼层
自己顶一下。快来人说一下好吧。
发表于 2009-3-3 09:51:46 | 显示全部楼层
pre_controller 那时候控制器还没实例化
如果能在controller实例化之后处理的话就把挂钩点改成 post_controller_constructor 吧。
 楼主| 发表于 2009-3-3 10:12:39 | 显示全部楼层
用pre_controller是想在控制器之前对用户身份做验证。用的CI的Auth扩展。是按Auth的wiki上说的方式,确行不通。有那位用过Auth呢?帮忙说一下吧。搞了一天了。
发表于 2009-3-3 10:21:52 | 显示全部楼层
从源码来看,你只好自己 $CI = new $class();了,其中$class是你的控制器类。

参见system/codeigniter/CodeIgniter.php 181-197行。
 楼主| 发表于 2009-3-3 13:46:40 | 显示全部楼层
没人用过pre_controller吗?继续等待......
发表于 2009-3-4 10:45:00 | 显示全部楼层
其实pre_controller不是像你这么用的。

你如果需要用CI实例,使用post_controller_constructor这个hook才是正确的。这时候已经调用了控制器的构造函数,但是还没有调用控制器的具体方法。
发表于 2009-3-4 18:50:17 | 显示全部楼层
说实话,不知道 构造控制器前调用钩子 和 构造完后调用 有什么区别,
总不能仅仅是多 初始化了一下,多做了一些操作而已
发表于 2009-3-5 14:05:09 | 显示全部楼层
就是仅仅多做了一点操作。ci的封装很简单的,整个框架差不多都是用include建起来的。看完源码以后,对他的性能非常放心。

我也是在hook里做登录校验,用的就是前面说的post_controller_constructor。
发表于 2009-3-5 18:12:39 | 显示全部楼层
就是仅仅多做了一点操作。ci的封装很简单的,整个框架差不多都是用include建起来的。看完源码以后,对他的性能非常放心。

我也是在hook里做登录校验,用的就是前面说的post_controller_constructor。 ...
erlang14 发表于 2009-3-5 14:05


那你倒讲讲什么时候用pre_controller

本版积分规则