CodeIgniter钩子用法

本文概述

  • 启用挂钩
  • 定义一个挂钩
  • 多次呼叫同一个挂钩
  • 挂钩点
  • 挂钩示例
在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') );

括号[]使你可以在多个脚本中使用相同的挂钩点。你的执行顺序将与定义的数组相同。
挂钩点 挂钩点列表如下所示。
  • 系统前
  • 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.
  • post_controller_constructo
  • It is called immediately after your controller is started, but before any method call.
  • 后控制器
  • It is called immediately after your controller is completely executed.
  • display_override
  • It is used to send the final page at the end of file execution.
  • cache_override
  • 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, 将显示以下输出。
CodeIgniter钩子用法

文章图片
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', ); ?>

【CodeIgniter钩子用法】5)现在, 再次使用相同的URL运行程序, 然后查看结果。
CodeIgniter钩子用法

文章图片

    推荐阅读