如何在codeIgniter中创建自定义挂钩


How to create custom hooks in codeIgniter?

我正在codeIgniter中制作一个PHP应用程序,并希望使用钩子实现灵活性。然而,codeIgniter中的钩子数量有限,所以我想创建自己的钩子。

我该怎么做?

您应该打开system/core/Codeigniter.php,查看钩子被调用的位置以及页面生命周期中的哪个部分。

299行中,调用了一个钩子,然后初始化了一个$class,然后调用了另一个钩子。

$EXT->_call_hook('pre_controller');
$CI = new $class();
$EXT->_call_hook('pre_controller_constructor');

因此,Codeigniter将获取pre_controller钩子的列表,并在$class初始化之前执行它们。在$class被初始化并且__constructor做了它的事情之后,__pre_controller_constructor钩子的列表将被执行。

那么什么是$CI = new $class()

$class来自路由器,此时已经初始化

因此,如果url指向mysite.com/category/products,那么指向$class=='category',那么真正发生的是这个$CI = new Category(); // application/controllers/category.php

如果在232行的函数function &get_instance(){}之前调用了一个钩子,那么您将无法访问super object,因为该函数尚未创建。在这一点上,你只处理PHP,将无法访问框架。

关于钩子的完整文档可以在这里找到https://ellislab.com/codeigniter/user-guide/general/hooks.html