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

Anu*_*nup 8 php hook codeigniter

我在codeIgniter中创建一个PHP应用程序,并希望使用钩子灵活.但是,codeIgniter中的钩子数量有限,所以我想创建自己的钩子.

我怎样才能做到这一点?

Phi*_*lip 1

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

在第299行,一个钩子被调用,然后 a$class被初始化,然后另一个钩子被调用。

$EXT->_call_hook('pre_controller');

$CI = new $class();

$EXT->_call_hook('pre_controller_constructor');
Run Code Online (Sandbox Code Playgroud)

所以发生的事情是 Codeigniter 将获取钩子列表并在初始化pre_controller之前执行它们。初始化并执行操作$class后,钩子列表将被执行。$class__constructor__pre_controller_constructor

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

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

所以如果 url 指向mysite.com/category/productsthen$class=='category'那么真正发生的事情是这样的$CI = new Category(); // application/controllers/category.php

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

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