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


Posted in PHP onSeptember 03, 2019

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

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

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

下面直接进入步骤:

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

<?php
namespace app\api\behavior;
//行为类
class AopTest{
  //绑定api初始化
  public function apiInit(&$params){
   //参数获取
   $id = input('id');//获取请求参数
   $uid = session('UID');//获取session 登录uid
   //打印输出
   echo PHP_EOL;
   echo 'ip检查'.$params.' GET:'.$id;
   echo ' uid='.$uid;
   echo PHP_EOL;
   //获取当前模块 控制器名 方法名称
   $request= \think\Request::instance();
   $controller_name = $request->controller();
   $model_name = $request->module();
   $action_name = $request->action();
   echo ' controller_name='.$controller_name.' model_name='.$model_name.' action_name='.$action_name;
   //构建数组
   $data = array();
   $data['status'] = 0;
   $data['msg'] = '没有权限';
   //exit(json_encode($data));//以json格式返回数据
  }
  //绑定api结束
  public function apiEnd(&$params){
   echo PHP_EOL;
   echo '日志记录'.$params;
   echo PHP_EOL;
  }
}

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

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

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

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

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

<?php
namespace app\api\controller;
use \think\Hook;
class Index
{
  //访问url http://app.tp5.com/index.php/api/index/index?id=5
 public function index()
 {
  session_start();
  session('UID',123);
  $id = input('id');
  $params1 = '参数1';
  $res = Hook::listen('api_init',$params1);
  echo var_export($res, true);
  echo 'api index';
  $params2 = '参数2';
  Hook::listen('api_end',$params2);
 }
}

4,访问查看输出效果:

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

5,文件分布示意

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

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

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP中spl_autoload_register()和__autoload()区别分析
May 10 PHP
PHP+memcache实现消息队列案例分享
May 21 PHP
PHP获取中英混合字符串长度的方法
Jun 07 PHP
php中动态变量用法实例
Jun 10 PHP
PHP中把对象数组转换成普通数组的方法
Jul 10 PHP
深入理解PHP JSON数组与对象
Jul 19 PHP
php 的反射详解及示例代码
Aug 25 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
Jun 06 PHP
Laravel框架路由设置与使用示例
Jun 12 PHP
PHP基于openssl实现的非对称加密操作示例
Jan 11 PHP
TP3.2.3框架文件上传操作实例详解
Jan 23 PHP
PHP数组基本用法与知识点总结
Jun 02 PHP
php中钩子(hook)的原理与简单应用demo示例
Sep 03 #PHP
php根据地址获取百度地图经纬度的实例方法
Sep 03 #PHP
Laravel使用Queue队列的技巧汇总
Sep 02 #PHP
PHP单文件上传原理及上传函数的封装操作示例
Sep 02 #PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
Sep 02 #PHP
PHP 文件上传限制问题
Sep 01 #PHP
laravel框架模板之公共模板、继承、包含实现方法分析
Aug 30 #PHP
You might like
海河写的 Discuz论坛帖子调用js的php代码
2007/08/23 PHP
php记录日志的实现代码
2011/08/08 PHP
浅析Apache中RewriteCond规则参数的详细介绍
2013/06/30 PHP
php自定文件保存session的方法
2014/12/10 PHP
php计算2个日期的差值函数分享
2015/02/02 PHP
PHP回调函数简单用法示例
2019/05/08 PHP
基于laravel where的高级使用方法
2019/10/10 PHP
Tips 带三角可关闭的文字提示
2010/10/06 Javascript
ASP.NET jQuery 实例8 (动态添加内容到DropDownList)
2012/02/03 Javascript
详解JavaScript函数绑定
2013/08/18 Javascript
JS实现跟随鼠标闪烁转动色块的方法
2015/02/26 Javascript
jquery+json实现动态商品内容展示的方法
2016/01/14 Javascript
去除html代码里面的script正则方法
2016/05/19 Javascript
seajs中模块依赖的加载处理实例分析
2017/10/10 Javascript
使用vuex解决刷新页面state数据消失的问题记录
2019/05/08 Javascript
layui-tree实现Ajax异步请求后动态添加节点的方法
2019/09/23 Javascript
QML实现圆环颜色选择器
2019/09/25 Javascript
vue vantUI tab切换时 list组件不触发load事件的问题及解决方法
2020/02/14 Javascript
React中获取数据的3种方法及优缺点
2020/02/18 Javascript
JavaScript队列结构Queue实现过程解析
2020/03/07 Javascript
[01:01:18]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#2COL VS LGD
2016/03/03 DOTA
深入理解Django的自定义过滤器
2017/10/17 Python
解决python web项目意外关闭,但占用端口的问题
2019/12/17 Python
pytorch .detach() .detach_() 和 .data用于切断反向传播的实现
2019/12/27 Python
Python基于pyecharts实现关联图绘制
2020/03/27 Python
Keras实现支持masking的Flatten层代码
2020/06/16 Python
python实现马丁策略的实例详解
2021/01/15 Python
详解pandas映射与数据转换
2021/01/22 Python
详解matplotlib绘图样式(style)初探
2021/02/03 Python
CSS书写规范、顺序和命名规则
2014/03/06 HTML / CSS
德国网上超市:myTime.de
2019/08/26 全球购物
在c#中using和new这两个关键字有什么意义
2013/05/19 面试题
2014年图书馆个人工作总结
2014/12/18 职场文书
放射科岗位职责
2015/02/14 职场文书
《从现在开始》教学反思
2016/02/16 职场文书
奇妙的 CSS shapes(CSS图形)
2021/04/05 HTML / CSS