我以前只在Asp.Net MVC中创建了Web应用程序,并且可以在每次操作方法时在BaseController上设置的“ActionFilter”中使用OnResultExecuted被执行(即基本上每次任何人访问应用程序中的任何页面)。每次在CodeIgniter中加载一个页面时运行一个函数
我该如何在CodeIgniter/PHP中做同样的事情?
编辑:
我试着用post_controller_constructor相反,根据其中一条建议,但这并不能帮助:
$hook['post_controller_constructor'] = array(
'class' => 'PreController',
'function' => 'getIp',
'filename' => 'preController.php',
'filepath' => 'hooks'
);
我仍然得到未定义的属性:PreController :: $输入(I只是没有重命名所调用的类,如果它现在仍然称为PreController,那应该不重要)。
但事实仍然是我没有访问输入属性......显然我没有访问输入类,所以我该怎么做呢?我相信,如果我在控制器中做了同样的事情,它会好起来的,但从钩子?我该怎么做呢?
很好的答案,谢谢,这就是我一直在寻找的。不过,只是一个后续问题。我需要能够访问输入类和用户代理类中的方法,例如在钩。要获取用户的IP地址,请检查机器人等。但是,如何从配置的钩子类访问这些地址。说我把我的钩类(PreController)放到文件夹钩子中。如果我尝试通过例如访问输入类echo $ this-> input-> ip_address();它不工作,undefined是错误信息...请注意,我是一个新手:-) – Anders
在超级对象完全构建之前执行'pre_controller'钩子,因此您将无法访问输入或用户代理类。请参阅http://stackoverflow.com/questions/2196559/codeigniter-hooks-pre-controller-loading-helpers。解决方法是使用'post_controller_constructor'钩子代替。 – birderic
请参阅我的编辑...我无法使其工作。 – Anders