本文概述

在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

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。

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文件夹中定义钩子。

defined('BASEPATH') OR exit('No direct script access allowed');

$hook['pre_controller'] = array(

'class' => 'Exm', 'function' => 'tut', 'filename' => 'exm.php', 'filepath' => 'hooks', );

?>

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

php中ci钩子,CodeIgniter钩子用法相关推荐

  1. “约见”面试官系列之常见面试题之第七十六篇之vue-router中的路由钩子函数基本用法 (建议收藏)

    vue-router中的路由钩子函数基本用法 路由钩子函数分为三种类型如下: 第一种:全局钩子函数. router.beforeEach((to, from, next) => { consol ...

  2. Thinkphp5.0行为钩子Hook的用法

    什么是行为钩子? 行为 可以把行为想象成在应用执行过程中的一个动作.例如在框架的执行流程中,路由检测.静态缓存.用户权限检测是一个行为,大到业务逻辑,小到浏览器检测.多语言检测等都可以当做是一个行为. ...

  3. vue 中 created 和 mounted 钩子生命周期 问题

    正如前面一篇博客中遇到的钩子生命周期问题 ,如果对基本的原理不清楚 就很难弄懂 这个问题 到底是什么原因造成的.所以今天我们就来简单的研究下 这两个钩子到底是个啥意思 created  钩子 moun ...

  4. Java中的JVM关闭钩子

    java面试题网站:www.javaoffers.com Java中的JVM关闭钩子 (翻译篇)关机钩子 也叫 关闭钩子 关机钩子是一种特殊的构造,允许开发人员插入一段代码,以便在JVM关闭时执行.当 ...

  5. Tornado-02-Tornado、路由进阶、视图进阶(视图中内置的钩子方法、视图方法调用顺序、冲刷缓存、用户认证)、模板语法(基本语法、内置标签或函数)

    Tornado 一.路由进阶 路由语法和参数 在路由列表的路由成员中,我们一共可以设置4个参数 url(r"/uri路径", 视图类, {"参数名":" ...

  6. 在WPF中快速实现键盘钩子

    原文:在WPF中快速实现键盘钩子 大部分的时候,当我们需要键盘事件的时候,可以通过在主窗口注册KeyBinding来实现,不过,有的时候我们需要的是全局键盘事件,想在任何一个地方都能使用,最开始的时候 ...

  7. JavaScript中的钩子(钩子机制\钩子函数\hook)是什么?

    我的博客https://www.ideaopen.cn/ 首先,看到我们的标题: JavaScript中的钩子(钩子机制\钩子函数\hook) 是什么? 我们前端的JavaScript中,经常提到钩子 ...

  8. 解析CI即CodeIgniter框架在Nginx下的重写规则

    本篇文章是对CI即CodeIgniter框架在Nginx下的重写规则进行了详细的分析介绍,需要的朋友参考下 最近研究CI框架,发现这个框架的路由功能在Nginx下有问题,报404错误,后来在网上查资料 ...

  9. 什么是钩子,钩子的原理

    钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的.当消息到达后,在目标窗口处理函数之前处理它.钩子机 ...

  10. 练习 进程钩子 全局钩子

    C++ 关于钩子的知识点博客网上基本写的都非常详细,这里只是简单分享一下本人练手的编程步骤和一些简单认识. 钩子程序就大概分成了2种: (1) 进程中的钩子:它 的作用范围只是限定在某个进程中,或者某 ...

最新文章

  1. 移动端适配之二:visual viewport、layout viewport和ideal viewport介绍
  2. Web.xml配置详解之context-param
  3. laravel模型中设计使用单选按钮的方法:
  4. ros 工作流程图2
  5. HH SaaS电商系统的结算系统设计
  6. ubantu 中配置Flash Player
  7. 产品专家Marty Cagan:不做仅仅会编码的人
  8. mac下Python2运行SparkSQL
  9. Docker : Error response from daemon: Get https://docker.elastic.co/v2/: net/http: TLS handshake time
  10. Selenium XPath示例
  11. 关于线上问题处理心得分享
  12. 怎么自学编程python_怎样自学Python编程?
  13. 2019年第二阶段我要变强个人训练赛第十五场
  14. 雷霆战机单机老版本_雷霆战机下载_雷霆战机电脑版单机游戏下载
  15. 【EasyUI篇】TreeGrid树表格组件
  16. redit mysql_这就是Reddit十年来的成就
  17. 2021年度训练联盟热身训练赛第三场——C,G,I
  18. 信息化计算机学什么作用,信息化教学在计算机技术课程的应用
  19. EventBus 最简易的使用方式
  20. 【CISSP备考笔记】第4章:通信与网络安全

热门文章

  1. 百度竞价关键词选词技巧
  2. Word 技术篇-文档中不同级别标题自动重新编号设置方法,论文多级编号演示
  3. 这样演示正弦和余弦的相互变换,不怕难懂!
  4. mysql 复制 数据 表结构_MySQL复制表结构和表数据
  5. 软硬一体的算法实践,阿里云如何以算法实现场景 “再创新”?
  6. 鼠标悬停图标360度旋转效果
  7. VUE中隐藏和限制DIV或其他HTML元素
  8. 872. 叶子相似的树 / 剑指 Offer 33. 二叉搜索树的后序遍历序列 / 剑指 Offer 34. 二叉树中和为某一值的路径 / 剑指 Offer 35. 复杂链表的复制
  9. 信息安全导论知识点梳理
  10. NVIDIA显卡怎么更新驱动