📅  最后修改于: 2021-01-01 03:29:44             🧑  作者: Mango
在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')
);
类-在这里,就不得不提到在hooks.php文件中定义的类的名称。如果您使用过程函数而不是类,请将其留空。
函数-提及您正在调用的函数名称。
filename-在application / hooks文件夹中创建的文件名,其中包含上述的类和函数名。
文件路径-在这里您必须提及包含脚本的目录的名称。您的脚本必须位于应用程序文件夹内。如果您的脚本位于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')
);
括号[]使您可以在多个脚本中使用相同的挂钩点。您的执行顺序将与定义的数组相同。
挂钩点列表如下所示。
在系统执行之前就调用了它。此时,仅基准和钩子类已加载。
在调用控制器之前立即调用它。至此,所有的类,安全检查和路由都已完成。
在控制器启动之后但在任何方法调用之前立即调用它。
控制器完全执行后立即调用。
它用于在文件执行结束时发送最终页面。
它使您可以在输出类中调用自己的函数。
在系统执行结束时将最终页面发送到浏览器之后,将调用该方法。
1)首先,如上所述,在您的CodeIgniter文件夹中启用该挂钩。
2)在application / controller文件夹中创建一个Controller文件example.php
使用网址运行上述程序时,
http://localhost/hooks/index.php/example ,将出现以下输出。
3)在application / hooks文件夹中创建一个钩子文件exm.php。
4)现在,您必须在application / config / hooks文件夹中定义钩子。
'Exm',
'function' => 'tut',
'filename' => 'exm.php',
'filepath' => 'hooks',
);
?>
5)现在,再次使用相同的URL运行程序,然后查看结果。