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实现首页链接查询 友情链接检查的代码
Jan 05 PHP
php模拟socket一次连接,多次发送数据的实现代码
Jul 26 PHP
解析在PHP中使用全局变量的几种方法
Jun 24 PHP
PHP防止表单重复提交的几种常用方法汇总
Aug 19 PHP
PHP操作FTP类 (上传、下载、移动、创建等)
Mar 31 PHP
详解PHP的Yii框架中扩展的安装与使用
Apr 01 PHP
完美利用Yii2微信后台开发的系列总结
Jul 18 PHP
php分页原理 分页代码 分页类制作教程
Sep 23 PHP
PHP中静态变量的使用方法实例分析
Dec 01 PHP
简单实现PHP留言板功能
Dec 21 PHP
PHP count_chars()函数讲解
Feb 14 PHP
asp.net和php的区别点总结
Oct 10 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中防止SQL注入攻击和XSS攻击的两个简单方法
2010/04/15 PHP
PHP5.3安装Zend Guard Loader图文教程
2014/09/29 PHP
php微信公众号开发之答题连闯三关
2018/10/20 PHP
return false,对阻止事件默认动作的一些测试代码
2010/11/17 Javascript
JavaScript调用ajax获取文本文件内容实现代码
2014/03/28 Javascript
js中this的用法实例分析
2015/01/10 Javascript
js函数与php函数的区别实例浅析
2015/01/12 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
2015/07/02 Javascript
原生JavaScript制作微博发布面板效果
2016/03/11 Javascript
ES6教程之for循环和Map,Set用法分析
2017/04/10 Javascript
实现一个完整的Node.js RESTful API的示例
2017/09/29 Javascript
React 组件转 Vue 组件的命令写法
2018/02/28 Javascript
jQuery+Datatables实现表格批量删除功能【推荐】
2018/10/24 jQuery
layui原生表单验证的实例
2019/09/09 Javascript
微信小程序背景音乐开发详解
2019/12/12 Javascript
JavaScript复制变量三种方法实例详解
2020/01/09 Javascript
[01:58]DOTA2上海特级锦标赛现场采访:RTZ这个ID到底好不好
2016/03/25 DOTA
[03:12]TI9战队档案 - Virtus Pro
2019/08/20 DOTA
python实现在pickling的时候压缩的方法
2014/09/25 Python
Python的加密模块md5、sha、crypt使用实例
2014/09/28 Python
python中self原理实例分析
2015/04/30 Python
python绘图方法实例入门
2015/05/19 Python
python使用正则表达式替换匹配成功的组并输出替换的次数
2017/11/22 Python
解决python大批量读写.doc文件的问题
2018/05/08 Python
python 每天如何定时启动爬虫任务(实现方法分享)
2018/05/21 Python
python操作mysql代码总结
2018/06/01 Python
python中添加模块导入路径的方法
2021/02/03 Python
自定义html标记替换html5新增元素
2008/10/17 HTML / CSS
Book Depository美国:全球领先的专业网上书店之一
2019/08/14 全球购物
SQL语言面试题
2013/08/27 面试题
考试不及格的检讨书
2014/01/22 职场文书
护理见习报告范文
2014/11/03 职场文书
2014年团工作总结
2014/11/27 职场文书
公司经营目标责任书
2015/01/29 职场文书
庆祝教师节活动总结
2015/03/23 职场文书
python神经网络学习 使用Keras进行回归运算
2022/05/04 Python