每次在CodeIgniter中加载页面时运行一个函数

时间:2011-09-30 09:16:41

标签: php codeigniter-2 pageload

我以前只在Asp.Net MVC中创建了Web应用程序,你可以在BaseController上设置的“ActionFilter”中使用OnResultExecuted,每次执行一个action方法时运行一个方法(即基本上每次访问任何一个应用程序中的页面。

我如何在CodeIgniter / PHP中做同样的事情?

编辑:

我尝试使用post_controller_constructor,根据其中一个建议,但这没有帮助:

$hook['post_controller_constructor'] = array(
                                'class'    => 'PreController',
                                'function' => 'getIp',
                                'filename' => 'preController.php',
                                'filepath' => 'hooks'
                                );

我仍然得到Undefined属性:PreController :: $ input(我刚刚没有重命名被调用的类,如果它暂时仍然被称为PreController那么无关紧要。)

但事实仍然是我无法访问输入属性...显然我无法访问输入类,所以我该怎么做?我相信如果我在控制器中做了同样的事情就可以了,但是从一个钩子?我该怎么做?

1 个答案:

答案 0 :(得分:5)

您可以使用CodeIgniter挂钩:http://www.codeigniter.com/user_guide/general/hooks.html

您可以加入几个“事件”,请查看文档页面的底部。


回应评论:

重新阅读你的评论和编辑...似乎你假设你的钩子类是当前的控制器 - 它不是。当前控制器与URI /路由映射匹配(例如,site.com/users/view/1将使用Users控制器,而不是您的钩子处理程序PreController类。钩子处理程序可以是一个不从CI_Controller继承的简单PHP类。

你需要在钩子处理程序中做的第一件事是获取实际的控制器,它将包含输入引用和其他。

class HookHandler {
    function post_controller_constructor() {
        $ci =& get_instance();
        // ... now you can use $ci->input and other controller members
    }
}