CodeIgniter用hook钩子实现Interceptor拦截器功能

宋清
• 阅读 3543

今天用ci框架的钩子实现一个例子,在每一次http请求后,在返回报文中的头部header中添加设置跨域访问的属性。

1.启用钩子

钩子特性可以在 application/config/config.php 文件中全局的启用或禁用, 设置下面这个参数:

$config['enable_hooks'] = TRUE;

2.定义钩子

钩子是在 application/config/hooks.php 文件中被定义的,每个钩子可以定义 为下面这样的数组格式:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$hook['post_controller'] = array(
    'function' => 'hook_resp',
    'filename'=> 'resp.php',
    'filepath' => 'hooks',
    'params' => array(),
);
  • post_controller 在你的控制器完全运行结束时执行。也就是controller在每一次处理http请求后执行。

  • function 你希望调用的方法或函数的名称。

  • filename 包含你的类或函数的文件名。

  • filepath 包含你的脚本文件的目录名。 注意: 你的脚本必须放在

  • application/ 目录里面,所以 filepath 是相对 application/ 目录的路径,举例来说,如果你的脚本位于
    application/hooks/ ,那么 filepath 可以简单的设置为 'hooks' ,如果你的脚本位于

application/hooks/utilities/ , 那么 filepath 可以设置为 'hooks/utilities'
,路径后面不用加斜线。

  • params 你希望传递给你脚本的任何参数,可选。

3.创建自定义钩子文件

在system/application/hooks中新增文件resp.php

<?
function hook_resp($params)
{
    // $CI =& get_instance();
    // $CI->output->set_header("Access-Control-Allow-Origin: * ");
    header("Access-Control-Allow-Origin: * ");
}

说明:此方案方便,低耦合,无需要修改controller 及method.
可以随时启用或变更

点赞
收藏
评论区
推荐文章
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Karen110 Karen110
4年前
5 分钟掌握 Python 中的 Hook 钩子函数
1\.什么是Hook经常会听到钩子函数(hookfunction)这个概念,最近在看目标检测开源框架mmdetection,里面也出现大量Hook的编程方式,那到底什么是hook?hook的作用是什么?whatishook?钩子hook,顾名思义,可以理解是一个挂钩,作用是有需要的时候挂一个东西上去。具体的解释是:钩子函数是把我们自己实现的h
Stella981 Stella981
3年前
Android Hook技术
1\.什么是HookHook英文翻译过来就是「钩子」的意思,那我们在什么时候使用这个「钩子」呢?在Android操作系统中系统维护着自己的一套事件分发机制。应用程序,包括应用触发事件和后台逻辑处理,也是根据事件流程一步步地向下执行。而「钩子」的意思,就是在事件传送到终点前截获并监控事件的传输,像个钩子钩上事件一样,并且能够在钩上事件时
Stella981 Stella981
3年前
Jenkins + Gogs 搭建DevOps环境
Gogs:1\.安装过程中,对外访问URL可配置公网IP地址:端口号,因为这个选项会影响未来git仓库的地址。2\.新建好仓库后,如果想实现提交代码后自动触发编译,则需要配置对应代码仓库的Webhook:仓库设置管理Web钩子AddanewWebhookGogs推送地址:http://Jenkins服务器地址/gogswe
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Git 原生钩子的深度优化
前言Git是最流行的版本控制工具,和大多数版本控制工具一样,Git也拥有钩子特性,用户可以利用钩子实现一些附加功能,在《ProGitv2》中,对钩子类型,消息格式等有详细介绍:8.3CustomizingGitGitHooks(https://www.oschina.net/action/GoToLink?urlht
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
JVM的关闭钩子
什么是关闭钩子(ShutdownHook)?先看看JavaDoc的说明:!(https://static.oschina.net/uploads/space/2016/1223/170211_Gknj_1434710.png)关闭钩子是指通过Runtime.addShutdownHook注册的但尚未开始的线程。这些钩子可以用于实现服务或
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
达里尔 达里尔
9个月前
vue3 组件切换监听不到onMounted
用vue3的时候有时候会遇到需要监听组件vif,如果遇到组件切换的时候onMounted钩子函数不触发,那么就用onUpdated这个钩子函数vueonUpdated(()//如果需要一个方法在每次vif切换组件的时候需要每次都触发,但是写在onMount