今天用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.
可以随时启用或变更


hellowoody
118 声望10 粉丝

个人网站:woodyhello.com