[英]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.