我正在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