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小马小结(方便查找后门的朋友)
May 05 PHP
php中3种方法统计字符串中每种字符的个数并排序
Aug 27 PHP
PHP获取MAC地址的具体实例
Dec 13 PHP
解决CodeIgniter伪静态失效
Jun 09 PHP
PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
Jun 12 PHP
php生成随机颜色方法汇总
Dec 03 PHP
php字符串按照单词进行反转的方法
Mar 14 PHP
yii用户注册表单验证实例
Dec 26 PHP
PHP的时间戳与具体时间转化的简单实现
Jun 13 PHP
PHP互换两个变量值的方法(不用第三变量)
Nov 14 PHP
在thinkphp5.0路径中实现去除index.php的方式
Oct 16 PHP
基于thinkphp5框架实现微信小程序支付 退款 订单查询 退款查询操作
Aug 17 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
制作美丽的拉花
2021/03/03 冲泡冲煮
php selectradio和checkbox默认选择的实现方法详解
2013/06/29 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
PHP封装的完整分页类示例
2018/08/21 PHP
event.keyCode键码值表 附只能输入特定的字符串代码
2009/05/15 Javascript
JavaScript通过RegExp实现客户端验证处理程序
2013/05/07 Javascript
javascript实现的一个带下拉框功能的文本框
2014/05/08 Javascript
Windows系统下使用Sublime搭建nodejs环境
2015/04/13 NodeJs
JSON+Jquery省市区三级联动
2016/01/13 Javascript
AngularJS中实现用户访问的身份认证和表单验证功能
2016/04/21 Javascript
Vue 组件传值几种常用方法【总结】
2018/05/28 Javascript
BootStrap modal实现拖拽功能
2018/12/01 Javascript
微信实现自动跳转到用其他浏览器打开指定APP下载
2019/02/15 Javascript
Electron 打包问题:electron-builder 下载各种依赖出错(推荐)
2020/07/09 Javascript
在Python程序中操作MySQL的基本方法
2015/07/29 Python
Python列表推导式、字典推导式与集合推导式用法实例分析
2018/02/07 Python
python opencv读mp4视频的实例
2018/12/07 Python
python 划分数据集为训练集和测试集的方法
2018/12/11 Python
Python使用Slider组件实现调整曲线参数功能示例
2019/09/06 Python
Python range、enumerate和zip函数用法详解
2019/09/11 Python
python 抓取知乎指定回答下视频的方法
2020/07/09 Python
python基于openpyxl生成excel文件
2020/12/23 Python
matplotlib制作雷达图报错ValueError的实现
2021/01/05 Python
匡威德国官网:Converse德国
2019/01/26 全球购物
意大利奢侈品综合电商网站:MODES
2019/12/14 全球购物
办公室前台岗位职责范本
2013/12/10 职场文书
小学运动会入场式解说词
2014/02/18 职场文书
幼儿老师求职信
2014/06/30 职场文书
2015年采购员工作总结
2015/04/27 职场文书
导游词之上饶龟峰
2019/10/25 职场文书
vue中data改变后让视图同步更新的方法
2021/03/29 Vue.js
MySql开发之自动同步表结构
2021/05/28 MySQL
Nginx反向代理学习实例教程
2021/10/24 Servers
postgreSQL数据库基础知识介绍
2022/04/12 PostgreSQL
python在package下继续嵌套一个package
2022/04/14 Python