繁体   English   中英

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

[英]Run a function each time a page loads in CodeIgniter

我以前仅在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'
                                );

我仍然得到Undefined属性:PreController :: $ input(我只是没有重命名被调用的类,现在是否仍被称为PreController没关系)。

但是事实仍然是,我无法访问input属性...显然,我无法访问Input类,那么该怎么办呢? 我相信,如果我在Controller中做过同样的事情,那应该没问题,但是从钩子上呢? 我该怎么做呢?

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

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


回应评论:

重新阅读您的评论并进行编辑……似乎您假设您的hook类是当前的控制器,但事实并非如此。 当前控制器与URI /路由映射相匹配(例如, site.com/users/view/1 / PreController / 1将使用Users控制器,而不是钩子处理程序PreController类)。 挂钩处理程序可以是不继承自CI_Controller的简单PHP类。

挂钩处理程序中需要做的第一件事是掌握实际的控制器,该控制器将包含Input引用和其他引用。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM