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 flush类输出缓冲剖析
Oct 19 PHP
php数组函数序列之array_sum() - 计算数组元素值之和
Oct 29 PHP
TMDPHP 模板引擎使用教程
Mar 13 PHP
Could not load type System.ServiceModel.Activation.HttpModule解决办法
Dec 29 PHP
基于simple_html_dom的使用小结
Jul 01 PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
Jul 08 PHP
PHP使用JSON和将json还原成数组
Feb 12 PHP
thinkPHP5.0框架模块设计详解
Mar 18 PHP
PHP 中TP5 Request 请求对象的实例详解
Jul 31 PHP
PHP 文件锁与进程锁的使用示例
Aug 07 PHP
PHP常见过waf webshell以及最简单的检测方法
May 21 PHP
利用PHP计算有多少小于当前数字的数字方法示例
Aug 26 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
php类常量的使用详解
2013/06/08 PHP
实现PHP框架系列文章(6)mysql数据库方法
2016/03/04 PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
2016/10/18 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
JavaScript 高效运行代码分析
2010/03/18 Javascript
使用jQuery向asp.net Mvc传递复杂json数据-ModelBinder篇
2010/05/07 Javascript
10个基于Jquery的幻灯片插件教程
2010/10/29 Javascript
JS下拉框内容左右移动效果的具体实现
2013/07/10 Javascript
Nodejs中读取中文文件编码问题、发送邮件和定时任务实例
2015/01/01 NodeJs
JS表的模拟方法
2015/02/05 Javascript
web 屏蔽BackSpace键实例代码
2016/12/24 Javascript
jQuery中的siblings()是什么意思(推荐)
2016/12/29 Javascript
总结js中的一些兼容性易错的问题
2017/12/18 Javascript
Angular 开发学习之Angular CLI的安装使用
2017/12/31 Javascript
Nuxt v-bind绑定img src不显示的解决
2019/12/05 Javascript
[01:10:58]KG vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python3 入门教程 简单但比较不错
2009/11/29 Python
Python实现基于HTTP文件传输实例
2014/11/08 Python
Python处理文本文件中控制字符的方法
2017/02/07 Python
Python使用pickle模块实现序列化功能示例
2018/07/13 Python
浅谈python常用程序算法
2019/03/22 Python
Python实现的ftp服务器功能详解【附源码下载】
2019/06/26 Python
pyqt5 QlistView列表显示的实现示例
2020/03/24 Python
CSS3属性 line-clamp控制文本行数的使用
2020/03/19 HTML / CSS
印度购买眼镜和太阳镜网站:Coolwinks
2018/09/26 全球购物
大学生如何写自荐信
2014/01/08 职场文书
高一家长会邀请函
2014/01/12 职场文书
2014年学习厉行节约反对浪费思想汇报
2014/09/10 职场文书
复活读书笔记
2015/06/29 职场文书
大学生村官驻村工作心得体会
2016/01/23 职场文书
制定企业培训计划的五大要点!
2019/07/10 职场文书
创业计划书之DIY自助厨房
2019/09/06 职场文书
浅谈Python基础之列表那些事儿
2021/05/11 Python
《勇者辞职不干了》ED主题曲无字幕动画MV公开
2022/04/13 日漫
Zabbix6通过ODBC方式监控Oracle 19C的详细过程
2022/09/23 Servers
CSS 鼠标选中文字后改变背景色的实现代码
2023/05/21 HTML / CSS