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高手?学会“懒惰”的编程
Dec 05 PHP
简单的PHP图片上传程序
Mar 27 PHP
PHP最常用的ini函数分析 针对PHP.ini配置文件
Apr 22 PHP
PHP仿博客园 个人博客(2) 数据库增添改删
Jul 05 PHP
PHP中浮点数计算比较及取整不准确的解决方法
Jan 09 PHP
CodeIgniter配置之config.php用法实例分析
Jan 19 PHP
Yii框架参数化查询中IN查询只能查询一个的解决方法
May 20 PHP
在Yii2特定页面如何禁用调试工具栏Debug Toolbar详解
Aug 07 PHP
Thinkphp5 自定义上传文件名的实现方法
Jul 23 PHP
Laravel5.4框架中视图共享数据的方法详解
Sep 05 PHP
laravel多条件查询方法(and,or嵌套查询)
Oct 09 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
ThinkPHP3.2.2实现持久登录(记住我)功能的方法
2016/05/16 PHP
php框架CI(codeigniter)自动加载与自主创建对象操作实例分析
2020/06/06 PHP
最佳JS代码编写的14条技巧
2011/01/09 Javascript
js拖动div 当鼠标移动时整个div也相应的移动
2013/11/21 Javascript
angularjs实现与服务器交互分享
2014/06/24 Javascript
JavaScript实现的MD5算法完整实例
2016/02/02 Javascript
很棒的js Tab选项卡切换效果
2016/08/30 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
2016/11/10 Javascript
JavaScript中setTimeout的那些事儿
2016/11/14 Javascript
Node.js websocket使用socket.io库实现实时聊天室
2017/02/20 Javascript
jQuery插件HighCharts绘制2D半圆环图效果示例【附demo源码下载】
2017/03/09 Javascript
vuejs手把手教你写一个完整的购物车实例代码
2017/07/06 Javascript
JS实现网页抢购功能(触发,终止脚本)
2017/11/27 Javascript
vue几个常用跨域处理方式介绍
2018/02/07 Javascript
vue实现图片滚动的示例代码(类似走马灯效果)
2018/03/03 Javascript
小程序开发基础之view视图容器
2018/08/21 Javascript
了解JavaScript表单操作和表单域
2019/05/27 Javascript
深入学习Vue nextTick的用法及原理
2019/10/08 Javascript
jQuery操作选中select下拉框的值代码实例
2020/02/07 jQuery
vue单应用在ios系统中实现微信分享功能操作
2020/09/07 Javascript
Vue2.x-使用防抖以及节流的示例
2021/03/02 Vue.js
深入解析神经网络从原理到实现
2019/07/26 Python
Python超越函数积分运算以及绘图实现代码
2019/11/20 Python
pytorch之inception_v3的实现案例
2020/01/06 Python
css3实现针线缝合效果(图解步骤)
2013/02/04 HTML / CSS
CSS 说明横向进度条最后显示文字的实现代码
2020/11/10 HTML / CSS
美国旅游网站:Tours4Fun
2017/02/17 全球购物
大专生的学习自我评价
2013/12/04 职场文书
竞选演讲稿范文
2013/12/28 职场文书
学习十八大精神心得体会
2013/12/31 职场文书
关于环保的演讲稿
2014/05/10 职场文书
2015年环保局工作总结
2015/05/22 职场文书
幼儿园安全教育随笔
2015/08/14 职场文书
用python实现监控视频人数统计
2021/05/21 Python
Go语言实现Snowflake雪花算法
2021/06/08 Golang
Pycharm远程调试和MySQL数据库授权问题
2022/03/18 MySQL