当前位置:首页 > CMS教程 > Thinkphp > 列表

Thinkphp5框架简单实现钩子(Hook)行为的方法示例

发布:smiling 来源: PHP粉丝网  添加日期:2021-12-14 10:04:19 浏览: 评论:0 

本文实例讲述了Thinkphp5框架简单实现钩子(Hook)行为的方法,分享给大家供大家参考,具体如下:

实现在一个方法开始和结束加入两个行为:api_init、api_end

框架的搭建和模块的建立这里就省略了,请不太熟练的同学自行学习。

下面直接进入步骤:

1,先创建一个行为类  \application\api\behavior\AopTest.php

  1. <?php 
  2. namespace app\api\behavior; 
  3. //行为类 
  4. class AopTest{ 
  5.   //绑定api初始化 
  6.   public function apiInit(&$params){ 
  7.    //参数获取 
  8.    $id = input('id');//获取请求参数 
  9.    $uid = session('UID');//获取session 登录uid 
  10.    //打印输出 
  11.    echo PHP_EOL; 
  12.    echo 'ip检查'.$params.' GET:'.$id
  13.    echo ' uid='.$uid
  14.    echo PHP_EOL; 
  15.    //获取当前模块 控制器名 方法名称 
  16.    $request= \think\Request::instance(); 
  17.    $controller_name = $request->controller(); 
  18.    $model_name = $request->module(); 
  19.    $action_name = $request->action(); 
  20.    echo ' controller_name='.$controller_name.' model_name='.$model_name.' action_name='.$action_name
  21.    //构建数组 
  22.    $data = array(); 
  23.    $data['status'] = 0; 
  24.    $data['msg'] = '没有权限'
  25.    //exit(json_encode($data));//以json格式返回数据 
  26.   } 
  27.   //绑定api结束 
  28.   public function apiEnd(&$params){ 
  29.    echo PHP_EOL; 
  30.    echo '日志记录'.$params
  31.    echo PHP_EOL; 
  32.   } 

2,配置标签 \application\api\tags.php

这里要注意的是配置的key就是对应的行为类内的方法,如果行为类内只需要一个方法,默认用run方法,如果是多个方法则对应的标签的key,

注: V5.0.4+ 版本以上,行为类的方法需要采用驼峰法命名 apiInit,如果在版本以下可以用 api_init

  1. // 应用行为扩展定义文件 
  2. return [ 
  3.  //接口初始化 
  4.  'api_init'  => ['app\\api\\behavior\\AopTest'], 
  5.  'api_end'  => ['app\\api\\behavior\\AopTest'], 
  6. ]; 

3,在要加入行为的类的方法内加入行为监听。

  1. <?php 
  2. namespace app\api\controller; 
  3. use \think\Hook; 
  4. class Index 
  5.   //访问url http://app.tp5.com/index.php/api/index/index?id=5 
  6.  public function index() 
  7.  { 
  8.   session_start(); 
  9.   session('UID',123); 
  10.   $id = input('id'); 
  11.   $params1 = '参数1'
  12.   $res = Hook::listen('api_init',$params1); 
  13.   echo var_export($res, true); 
  14.   echo 'api index'
  15.   $params2 = '参数2'
  16.   Hook::listen('api_end',$params2); 
  17.  } 

4,访问查看输出效果:

5,文件分布示意

简单的实现了一下,希望给想了解的同学一点启发。

Tags: Thinkphp5钩子 Hook

分享到: