框架Thinkphp5 简单的实现行为 钩子 Hook
这篇文章主要介绍了关于框架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,访问查看输出效果:

5,文件分布示意

转: http://www.php.cn/php-weizijiaocheng-395038.html
框架Thinkphp5 简单的实现行为 钩子 Hook的更多相关文章
- CI框架源代码阅读笔记6 扩展钩子 Hook.php
CI框架同意你在不改动系统核心代码的基础上加入或者更改系统的核心功能(如重写缓存.输出等). 比如,在系统开启hook的条件下(config.php中$config['enable_hooks'] = ...
- 理解钩子Hook以及在Thinkphp下利用钩子使用行为扩展
什么是钩子函数 个人理解:钩子就像一个”陷阱”.”监听器”,当A发送一个消息到B时,当消息还未到达目的地B时,被钩子拦截调出一部分代码做处理,这部分代码也叫钩子函数或者回调函数 参考网上说法 譬如我们 ...
- 如何设计Java框架----一个简单的例子【翻译】
原文:http://www.programcreek.com/2011/09/how-to-design-a-java-framework/ 原文和翻译都只是参考,如有不对,欢迎指正. 你可能会好奇框 ...
- C# 钩子HOOK专题(1)
目录 基本概念 运行机制 钩子类型 作者 基本概念 钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程 ...
- 高性能PHP框架thinkphp5.0.0 Beta发布-为API开发而设计
ThinkPHP V5.——为API开发而设计的高性能框架 ThinkPHP5..0版本是一个颠覆和重构版本,采用全新的架构思想,引入了很多的PHP新特性,优化了核心,减少了依赖,实现了真正的惰性加载 ...
- 基于ThinkPHP框架的简单的后台管理系统
版权声明:本文为博主原创文章,未经博主允许不得转载. 基于ThinkPHP框架的简单的后台管理系统 一个简单的后台管理系统,可能还不全面,可以自己改,有登录功能 实例如图:
- PHP ORM框架与简单代码实现(转)
对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据 ...
- 初识服务发现及Consul框架的简单使用
初识服务发现及Consul框架的简单使用 1.什么是服务发现? 服务发现组件记录了(大规模)分布式系统中所有服务的信息,人们或者其它服务可以据此找到这些服务. DNS 就是一个简单的例子. 当然, ...
- truffle框架的简单使用
truffle 给大家介绍一下这个框架怎么使用,其实把这个框架就是你们看我之前有一个教程是教你们怎么用remix-ide来连接私有链,编译,配置合约,然后进行调用的,truffle其实就是把这个步骤放 ...
随机推荐
- hdu 1263 水果 【二维map】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1263 题目大意: Problem Description 夏天来了~~好开心啊,呵呵,好多好多水果~~ ...
- Linux发展历史
一.硬件与软件发展历史 计算机由硬件和软件组成结构 硬件 1946年诞生于宾夕法尼亚州,占地170平米,重量达到30吨,名字叫做ENIAC(electronic numerical integrato ...
- input模拟输入下拉框
功能点: 输入.下拉选择.根据输入内容模糊检索.键盘上下键选择 实现思路: 显示隐藏: input获取焦点显示,失去焦点隐藏 下拉选择: 以父元素为基准,通过绝对定位定位至input输入下方 模 ...
- Vue自学
一.前端MVC概要 1.1.库与框架的区别 框架是一个软件的半成品,在全局范围内给了大的约束.库是工具,在单点上给我们提供功能.框架是依赖库的.Vue是框架而jQuery则是库. 1.2.AMD与CM ...
- SpringBoot使用AOP
本文介绍SpringBoot中使用Spring AOP. 简介 AOP简介 AOP可能对于广大开发者耳熟能详,它是Aspect Oriented Programming的缩写,翻译成中文就是:面向切面 ...
- 解决Python自带的json不能序列化data,datetime类型数据问题
官方文档中的一个Demo: >>> import json >>> class ComplexEncoder(json.JSONEncoder): ... def ...
- Java -- 内部类(一)
什么是内部类 将一个类的定义放在另一个类的定义内部,这就是内部类.在Java中内部类主要分为成员内部类.局部内部类.匿名内部类.静态内部类.举个栗子: public class A { public ...
- DJI-A2调参详细教程
DJI-A2飞控系统用户手册 https://wenku.baidu.com/view/bb632f88227916888586d749.html DJI-A2调参软件视频教程 http://www. ...
- FFT是个啥?
简单来说就是一个计算多项式乘法的东西呀.. 以下内容基本都是在大黑书<算法导论>上的.. 总述 对于项数为$n$的多项式$A(x)$和项数为$m$的多项式$B(x)$,可以如此表达: $$ ...
- PAT-Top1001. Battle Over Cities - Hard Version (35)
在敌人占领之前由城市和公路构成的图是连通图.在敌人占领某个城市之后所有通往这个城市的公路就会被破坏,接下来可能需要修复一些其他被毁坏的公路使得剩下的城市能够互通.修复的代价越大,意味着这个城市越重要. ...