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 相关文章推荐
PHP5中新增stdClass 内部保留类
Jun 13 PHP
php判断输入不超过mysql的varchar字段的长度范围
Jun 24 PHP
简单的PHP缓存设计实现代码
Sep 30 PHP
在windows服务器开启php的gd库phpinfo中未发现
Jan 13 PHP
更改localhost为其他名字的方法
Feb 10 PHP
php阻止页面后退的方法分享
Feb 17 PHP
php把大写命名转换成下划线分割命名
Apr 27 PHP
php中smarty实现多模版网站的方法
Jun 11 PHP
php将html转为图片的实现方法
May 19 PHP
PHP文件操作实例总结【文件上传、下载、分页】
Dec 08 PHP
PHP7 安装event扩展的实现方法
Oct 08 PHP
PhpSpreadsheet中文文档 | Spreadsheet操作教程实例
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
PHP 工厂模式使用方法
2010/05/18 PHP
PDO::exec讲解
2019/01/28 PHP
js限制文本框输入长度两种限制方式(长度、字节数)
2012/12/19 Javascript
两种方法实现文本框输入内容提示消失
2013/03/17 Javascript
jquery 提示信息显示后自动消失的具体实现
2013/12/18 Javascript
jquery下拉select控件操作方法分享(jquery操作select)
2014/03/25 Javascript
indexOf 和 lastIndexOf 使用示例介绍
2014/09/02 Javascript
jQuery实现鼠标单击网页文字后在文本框显示的方法
2015/05/06 Javascript
Jquery实现跨域异步上传文件总结
2017/02/03 Javascript
bootstrap 通过加减按钮实现输入框组功能
2017/11/15 Javascript
JS运动改变单物体透明度的方法分析
2018/01/23 Javascript
Angular6笔记之封装http的示例代码
2018/07/27 Javascript
利用原生JavaScript实现造日历轮子实例代码
2019/05/08 Javascript
详解vue-cli3开发Chrome插件实践
2019/05/29 Javascript
解决antd Form 表单校验方法无响应的问题
2020/10/27 Javascript
[43:03]完美世界DOTA2联赛PWL S2 PXG vs Magma 第二场 11.21
2020/11/24 DOTA
Python的函数嵌套的使用方法
2014/01/24 Python
Python实现处理管道的方法
2015/06/04 Python
Python实现删除当前目录下除当前脚本以外的文件和文件夹实例
2015/07/27 Python
python数字图像处理之高级形态学处理
2018/04/27 Python
python实现梯度下降算法
2020/03/24 Python
使用python判断你是青少年还是老年人
2018/11/29 Python
PyTorch 对应点相乘、矩阵相乘实例
2019/12/27 Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
2020/04/27 Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
2020/04/30 Python
Python可以实现栈的结构吗
2020/05/27 Python
python中pathlib模块的基本用法与总结
2020/08/17 Python
html5中 media(播放器)的api使用指南
2014/12/26 HTML / CSS
C++:memset ,memcpy和strcpy的根本区别
2013/04/27 面试题
文件中有一组整数,要求排序后输出到另一个文件中
2012/01/04 面试题
《和田的维吾尔》教学反思
2014/04/14 职场文书
竞选学生会演讲稿
2014/04/25 职场文书
思想作风整顿个人剖析材料
2014/10/06 职场文书
人力资源部工作计划
2019/05/14 职场文书
廉政党课工作报告案例
2019/06/21 职场文书
SpringBoot连接MySQL获取数据写后端接口的操作方法
2021/11/02 MySQL