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

And*_*ers 2 php pageload codeigniter-2

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

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

编辑:

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

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

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

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

Joa*_*iro 5

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

您可以连接几个"事件",请查看文档页面的底部.


回应评论:

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

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

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