我以前只在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那么无关紧要。)
但事实仍然是我无法访问输入属性...显然我无法访问输入类,所以我该怎么做?我相信如果我在控制器中做了同样的事情就可以了,但是从一个钩子?我该怎么做?
答案 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
}
}