本文概述
在CodeIgniter中, 挂钩是可以在程序执行之前和之后调用的事件。它允许在CodeIgniter执行过程中执行具有特定路径的脚本, 而无需修改核心文件。例如, 它可用于需要在执行控制器之前检查用户是否已登录的地方。使用钩子可以节省你多次编写代码的时间。
CodeIgniter中有两个挂钩文件。一个是application / config / hooks.php文件夹, 另一个是application / hooks文件夹。
换句话说, 如果要在每次加载控制器构造函数后都运行代码, 则可以在钩子中指定该脚本路径。
启用挂钩
要启用挂钩, 请转到application / config / config.php文件并将其设置为TRUE, 如下所示。
$config['enable_hooks'] = TRUE;
定义一个挂钩
钩子可以在application / config / hooks.php文件中定义。每个挂钩被定义为一个由以下术语组成的数组。
$hook['pre_controller'] = array(
'class' => 'Classname', 'function' => 'functionname', 'filename' => 'filename.php', 'filepath' => 'hooks', 'params' => array('element1', 'element2', 'element3')
);
class-在这里, 你必须提及在hooks.php文件中定义的类的名称。如果你使用过程函数而不是类, 请将其留空。
函数-提及你正在调用的函数名称。
filename-在application / hooks文件夹中创建的文件名, 包含上面提到的类和函数名。
filepath-在这里你必须提及包含脚本的目录的名称。你的脚本必须位于应用程序文件夹内。如果你的脚本位于application / hooks文件夹中, 那么你的路径将仅仅是钩子。但是, 如果你的脚本位于application / hooks / office文件夹中, 则你的路径将为hooks / office。
params-它包含你要在脚本中传递的参数, 并且是可选的。
多次呼叫同一个挂钩
你可以使用多维数组来通过多个脚本使用同一挂钩点。
$hook['pre_controller'][] = array(
'class' => 'Classname1', 'function' => 'functionname1', 'filename' => 'filename1.php', 'filepath' => 'hooks', 'params' => array('element1', 'element2', 'element3')
);
$hook['pre_controller'][] = array(
'class' => 'Classname2', 'function' => 'functionname2', 'filename' => 'filename2.php', 'filepath' => 'hooks', 'params' => array('element4', 'element5', 'element6')
);
括号[]使你可以在多个脚本中使用相同的挂钩点。你的执行顺序将与定义的数组相同。
挂钩点
挂钩点列表如下所示。
- 系统前
- 前置控制器
- post_controller_constructo
- 后控制器
- display_override
- cache_override
- 后系统
It is called much before the system execution. Only benchmark and hook class have been loaded at this point.
It is called immediately prior to your controller being called. At this point all the classes, security checks and routing have been done.
It is called immediately after your controller is started, but before any method call.
It is called immediately after your controller is completely executed.
It is used to send the final page at the end of file execution.
It enables you to call your own function in the output class.
It is called after the final page is sent to the browser at the end of the system execution.
挂钩示例
1)首先, 如上所述, 在你的CodeIgniter文件夹中启用该挂钩。
2)在application / controller文件夹中创建一个Controller文件example.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Example extends CI_Controller {
public function index()
{
echo "CodeIgniter Tutorial";
}
}
使用网址运行上述程序时,
http://localhost/hooks/index.php/example, 将显示以下输出。
3)在application / hooks文件夹中创建一个钩子文件exm.php。
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Exm extends CI_Controller {
public function tut()
{
echo "Welcome to srcmini. This is ";
}
}
?>
4)现在, 你必须在application / config / hooks文件夹中定义钩子。
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$hook['pre_controller'] = array(
'class' => 'Exm', 'function' => 'tut', 'filename' => 'exm.php', 'filepath' => 'hooks', );
?>
5)现在, 再次使用相同的URL运行程序, 然后查看结果。