Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在codeIgniter中创建自定义挂钩?_Php_Codeigniter_Hook - Fatal编程技术网

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

Php 如何在codeIgniter中创建自定义挂钩?,php,codeigniter,hook,Php,Codeigniter,Hook,我正在用codeIgniter制作一个PHP应用程序,希望使用钩子实现灵活性。然而,codeIgniter中的钩子数量有限,所以我想创建自己的钩子 如何实现这一点?您应该打开system/core/Codeigniter.php,查看钩子在哪里被调用,以及页面生命周期中的哪个部分 在第299行中,调用了一个钩子,然后初始化了一个$class,然后调用了另一个钩子 $EXT->_call_hook('pre_controller'); $CI = new $class(); $EXT-&

我正在用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
并且
\u构造函数
完成了它的工作之后,
\u pre\u controller\u构造函数
钩子列表将被执行

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

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

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

如果在
函数&get_instance(){}
第232行232之前调用了钩子,那么您将无法访问
超级对象,因为函数尚未创建。此时,您将无法单独处理PHP,也无法访问该框架

关于钩子的完整文档可以在这里找到