我在codeIgniter中创建了一个PHP应用程序,并希望使用钩子灵活性。但是,codeIgniter中的钩子数量有限,所以我想创建自己的钩子。
我该怎么做?
答案 0 :(得分:1)
您应该打开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
来自路由器,此时已经初始化
因此,如果网址指向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