如何在codeIgniter中创建自定义钩子?

v7pvogib  于 2022-12-07  发布在  其他
关注(0)|答案(1)|浏览(143)

我正在codeIgniter中制作一个PHP应用程序,希望能够灵活地使用钩子。但是,codeIgniter中的钩子数量有限,所以我想创建自己的钩子。
我该怎么做?

k7fdbhmy

k7fdbhmy1#

您应该打开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

相关问题