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 相关文章推荐
ThinkPHP模板Switch标签用法示例
Jun 30 PHP
YII实现分页的方法
Jul 09 PHP
PHP实现采集抓取淘宝网单个商品信息
Jan 08 PHP
php简单实现MVC
Feb 05 PHP
php查询whois信息的方法
Jun 08 PHP
php算法实例分享
Jul 14 PHP
全面解读PHP的Yii框架中的日志功能
Mar 17 PHP
Windows2003下php5.4安装配置教程(IIS)
Jun 30 PHP
PHP微信网页授权的配置文件操作分析
May 29 PHP
PHP判断当前使用的是什么浏览器(推荐)
Oct 27 PHP
PHP连接MySQL数据库三种实现方法
Dec 10 PHP
微信小程序和php的登录实现
Apr 01 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
laravel容器延迟加载以及auth扩展详解
2015/03/02 PHP
CodeIgniter生成静态页的方法
2016/05/17 PHP
Bootstrap+PHP实现多图上传功能实例详解
2018/04/08 PHP
jquery制作弹窗提示窗口代码分享
2014/03/02 Javascript
JavaScript中Cookies的相关使用教程
2015/06/04 Javascript
每日十条JavaScript经验技巧(一)
2016/06/23 Javascript
JS选取DOM元素的简单方法
2016/07/08 Javascript
webpack+vuex+axios 跨域请求数据的示例代码
2018/03/06 Javascript
解析vue路由异步组件和懒加载案例
2018/06/08 Javascript
解决vue单页面修改样式无法覆盖问题
2019/08/05 Javascript
layui表单验证select下拉框实现验证的方法
2019/09/05 Javascript
浅谈Vue SSR中的Bundle的具有使用
2019/11/21 Javascript
基于Element封装一个表格组件tableList的使用方法
2020/06/29 Javascript
vue键盘事件点击事件加native操作
2020/07/27 Javascript
vue3为什么要用proxy替代defineProperty
2020/10/19 Javascript
Python3.x对JSON的一些操作示例
2017/09/01 Python
Python第三方Window模块文件的几种安装方法
2018/11/22 Python
使用Python批量修改文件名的代码实例
2019/01/24 Python
Pytorch加载部分预训练模型的参数实例
2019/08/18 Python
使用 Python 合并多个格式一致的 Excel 文件(推荐)
2019/12/09 Python
Django认证系统user对象实现过程解析
2020/03/02 Python
jupyter修改文件名方式(TensorFlow)
2020/04/21 Python
Python ini文件常用操作方法解析
2020/04/26 Python
完美解决jupyter由于无法import新包的问题
2020/05/26 Python
如何用Python 加密文件
2020/09/10 Python
python try...finally...的实现方法
2020/11/25 Python
canvas拼图功能实现代码示例
2018/11/21 HTML / CSS
JBL澳大利亚官方商店:扬声器、耳机和音响系统
2018/05/24 全球购物
HEMA英国:荷兰原创设计
2018/08/28 全球购物
世界上最大的冷却器制造商:Igloo Coolers
2019/07/23 全球购物
客服专员岗位职责
2014/02/28 职场文书
公司合作意向书
2014/04/01 职场文书
一文读懂go中semaphore(信号量)源码
2021/04/03 Golang
如何将JavaScript将数组转为树形结构
2021/06/02 Javascript
Java使用jmeter进行压力测试
2021/07/09 Java/Android
MySQL 那些常见的错误设计规范,你都知道吗
2021/07/16 MySQL