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 相关文章推荐
用libtemplate实现静态网页生成
Oct 09 PHP
UCenter中的一个可逆加密函数authcode函数代码
Jul 20 PHP
php foreach 参数强制类型转换的问题
Dec 10 PHP
php发送get、post请求的6种方法简明总结
Jul 08 PHP
php实现建立多层级目录的方法
Jul 19 PHP
PHP动态页生成静态页的3种常用方法
Nov 13 PHP
php目录拷贝实现方法
Jul 10 PHP
WordPress中用于获取及自定义头像图片的PHP脚本详解
Dec 17 PHP
CI(CodeIgniter)模型用法实例分析
Jan 20 PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
Apr 07 PHP
php封装的图片(缩略图)处理类完整实例
Oct 19 PHP
php实现session共享的实例方法
Sep 19 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原创论坛
2006/10/09 PHP
php自动注册登录验证机制实现代码
2011/12/20 PHP
wordpress网站转移到本地运行测试的方法
2017/03/15 PHP
PHP用continue跳过本次循环中剩余代码的注意点
2017/06/27 PHP
php7安装mongoDB扩展的方法分析
2017/08/02 PHP
jquery 实现的全选和反选
2009/04/15 Javascript
Jquery之美中不足小结
2011/02/16 Javascript
如何判断元素是否为HTMLElement元素
2013/12/06 Javascript
JavaScript生成随机字符串的方法
2015/03/19 Javascript
jQuery插件jRumble实现网页元素抖动
2015/06/05 Javascript
jQuery实现ajax调用WCF服务的方法(附带demo下载)
2015/12/04 Javascript
基于javascript简单实现对身份证校验
2021/01/25 Javascript
微信小程序 天气预报开发实例代码源码
2017/01/20 Javascript
js 实现省市区三级联动菜单效果
2017/02/20 Javascript
微信小程序遇到修改数据后页面不渲染的问题解决
2017/03/09 Javascript
JS实现含有中文字符串的友好截取功能分析
2017/03/13 Javascript
Vue2.0使用过程常见的一些问题总结学习
2017/04/10 Javascript
easyui-datagrid特殊字符不能显示的处理方法
2017/04/12 Javascript
完美解决mui框架off-canvas侧滑超出部分隐藏无法滚动的问题
2018/01/25 Javascript
在vue中使用setInterval的方法示例
2019/04/16 Javascript
Vuex 模块化使用详解
2019/07/31 Javascript
前端vue+elementUI如何实现记住密码功能
2020/09/20 Javascript
Python3用tkinter和PIL实现看图工具
2018/06/21 Python
python用WxPython库实现无边框窗体和透明窗体实现方法详解
2020/02/21 Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
2020/12/11 Python
纯css3(无图片/js)制作的几个社交媒体网站的图标
2013/03/21 HTML / CSS
IE8下CSS3选择器nth-child() 不兼容问题的解决方法
2016/11/16 HTML / CSS
巴西Bo.Bô官方在线商店:经营奢侈品时尚业务
2020/03/16 全球购物
俄罗斯最大的香水和化妆品网上商店:Randewoo
2020/11/05 全球购物
专业幼师实习生自我鉴定范文
2013/12/08 职场文书
工作交流会欢迎词
2014/01/12 职场文书
《放飞蜻蜓》教学反思
2014/04/27 职场文书
建筑安全责任书范本
2014/07/24 职场文书
应届毕业生求职简历自我评价
2015/03/02 职场文书
jquery插件实现代码雨特效
2021/04/24 jQuery
MySQL创建管理LIST分区
2022/04/13 MySQL