【TP5.1】钩子的使用

简介: 【TP5.1】钩子的使用

文件分布示意

屏幕快照 2022-05-16 下午10.40.30.png

创建钩子文件

data/behavior/AopTest.php

<?php
namespace data\behavior;
class AopTest
{
    //绑定api初始化
    public function apiInit($params){
        echo 'api初始化开始';
    }
    //绑定api结束
    public function apiEnd($params){
        echo 'api初始化结束';
    }
}

配置钩子

application/tags.php

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
// 应用行为扩展定义文件
return [
    // 应用初始化
    'app_init'     => [
        \data\behavior\MessageBehavior::class,
        \data\behavior\LoadBehavior::class,
    ],
    // 应用开始
    'app_begin'    => [],
    //接口初始化
    'api_init'      => [\data\behavior\AopTest::class],
    'api_end'      => [\data\behavior\AopTest::class],
    // 模块初始化
    'module_init'  => [],
    // 操作开始执行
    'action_begin' => [],
    // 视图内容过滤
    'view_filter'  => [],
    // 日志写入
    'log_write'    => [],
    // 应用结束
    'app_end'      => [],
];

在要加入行为的类的方法内加入行为监听。

application/index/controller/Aop.php

<?php
namespace app\index\controller;
use think\facade\Hook;
use think\Controller;
class Aop extends Controller
{
    public function index()
    {
        $id = 123;
        $params1  = '参数1';
        $res = Hook::listen('api_init',$params1);
        echo 'api index';
        $params2 = '参数2';
        Hook::listen('api_end',$params2);
    }
}

访问查看输出效果:

api初始化开始api indexapi初始化结束

相关文章
|
8月前
|
JavaScript 前端开发
定时器 setInterval 有一个有名函数 fn1,setInterval(fn1, 500)与 setInterval(fn1(), 500)有什么区别?
定时器 setInterval 有一个有名函数 fn1,setInterval(fn1, 500)与 setInterval(fn1(), 500)有什么区别?
74 1
|
存储 安全 Java
4.7 x64dbg 应用层的钩子扫描
所谓的应用层钩子(Application-level hooks)是一种编程技术,它允许应用程序通过在特定事件发生时执行特定代码来自定义或扩展其行为。这些事件可以是用户交互,系统事件,或者其他应用程序内部的事件。应用层钩子是在应用程序中添加自定义代码的一种灵活的方式。它们可以用于许多不同的用途,如安全审计、性能监视、访问控制和行为修改等。应用层钩子通常在应用程序的运行时被调用,可以执行一些预定义的操作或触发一些自定义代码。
124 0
4.7 x64dbg 应用层的钩子扫描
|
安全 开发者
4.5 x64dbg 探索钩子劫持技术
钩子劫持技术是计算机编程中的一种技术,它们可以让开发者拦截系统函数或应用程序函数的调用,并在函数调用前或调用后执行自定义代码,钩子劫持技术通常用于病毒和恶意软件,也可以让开发者扩展或修改系统函数的功能,从而提高软件的性能和增加新功能。钩子劫持技术的实现一般需要在对端内存中通过`create_alloc()`函数准备一块空间,并通过`assemble_write_memory()`函数,将一段汇编代码转为机器码,并循环写出自定义指令集到堆中,函数`write_opcode_from_assemble()`就是我们自己实现的,该函数传入一个汇编指令列表,自动转为机器码并写出到堆内,函数的核心代码如
146 0
4.5 x64dbg 探索钩子劫持技术
|
JavaScript 前端开发
JS引擎的执行机制event loop
JS引擎的执行机制event loop
76 0
|
中间件 PHP
tp5与tp6的区别--详解
tp5与tp6的区别--详解
298 0
|
存储 JavaScript
tp5源码解析--hook(钩子函数)类详解
tp5源码解析--hook(钩子函数)类详解
294 0
tp5源码解析--hook(钩子函数)类详解
|
中间件
TP5.1中间件跟行为钩子区别
TP5.1中间件跟行为钩子区别
198 6
TP5.1中间件跟行为钩子区别
|
监控
钩子 (Hook)
钩子 (Hook)
235 1
|
消息中间件 C++ Windows
c++ hook 钩子的使用介绍
一、基本概念:     钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。
2689 0