介绍tp5框架中的hook机制
下面由thinkphp教程栏目给大家介绍tp5框架中的hook机制,希望对需要的朋友有所帮助!
1. 官方解释
行为(Behavior)是ThinkPHP扩展机制中比较关键的一项扩展,行为既可以独立调用,也可以绑定到某个标签中进行侦听,在官方提出的CBD模式中行为也占了主要的地位,可见行为在ThinkPHP框架中意义非凡。
2. TP5自带钩子(TP框架中已经埋好标签,我们只要配置实现相应的函数就可以用了)
- app_init 应用初始化标签位,在think\App.php的initCommon函数中Hook::listen(‘app_init’);没有接收参数。
- app_begin应用开始标签位,在think\App.php的run函数中,在加载路由和请求信息后执行。会接收一个参数,存储的是本次请求的调度信息。
- module_init 模块初始化标签位,在think\App.php的module函数中,在加载请求控制器之前执行,接收一个参数,存储请求信息。
- action_init 控制器开始标签位,在think\App.php的module函数中,在加载完控制器后,使用反射请求控制器之前执行。接收一个参数,是一个数组,第一个元素是请求控制器实例对象,第二个函数时要执行的控制器函数名。
- view_fileter 视图输出过滤标签位,在think\View.php的fetch函数中,接收一个参数,视图字符串。
- app_end 应用结束标签为,在think\App.php中run函数中,Hook::listen(‘app_end’);
- log_write 日志write方法标签位,在调用Log::wirte记录日志之前执行。接收一个参数,要写入的日志信息。
- response_end 响应结束标签为。在think\Response.php的send函数中,在响应客户端请求之后执行。
3. 钩子函数的注册和监听都依赖于think\Hook.php
4. 系统只带的钩子函数,我们可以在application\tags.php中注册,也可以使用Hook::add()来添加。
> 1. 官方文档数tags.php会自动加载,但是经测试我下载的tp5不会自动加载tags.php文件,所以就手动在think\start.php文件的App::run()->send();函数之前写了一行代码用于,注册tags文件中的钩子实现。代码为 "php // 加载Hook Hook::import(require APP_PATH . '/tags.php'); " > 2. 也可以使用Hook::add和Hook::listen来添加自己的钩子函数。Hook::listen()相当于是标签位,Hook::add()则相当于是对标签位相应的实现。所以要确保Hook::add()在Hoo::listen之前执行,不然就没什么用处了。
5. 钩子函数的绑定。
钩子函数既可以单独绑定一个类,也可以绑定类中的一个方法,或者直接绑定一个匿名函数。当绑定到一个类时,如果类中有run函数,那就直接执行run函数,如果没有run函数,而有一个与钩子名一样的函数则会执行该函数。(注意:钩子函数是驼峰式命名,并且钩子函数名的优先级大于run函数的优先级)
以上是介绍tp5框架中的hook机制的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

本文展示了使用ThinkPHP的CLI功能来构建命令行应用程序(CLI)。 它强调了最佳实践,例如模块化设计,依赖注入和强大的错误处理,同时突出了诸如INSU之类的常见陷阱

本文讨论了在无服务器体系结构中使用ThinkPHP的关键注意事项,专注于性能优化,无状态设计和安全性。它突出了诸如成本效率和可扩展性之类的收益,但也应对挑战

ThinkPHP的IOC容器提供了高级功能,例如懒惰加载,上下文绑定和方法注入PHP App中有效依赖性管理的方法。Character计数:159

本文讨论了通过参数化查询来防止ThinkPhp中的SQL注入漏洞,避免使用原始SQL,使用ORM,常规更新和正确的错误处理。它还涵盖了确保数据库查询和验证的最佳实践

本文概述了使用ThinkPhp和RabbitMQ构建分布式任务队列系统,重点是安装,配置,任务管理和可扩展性。关键问题包括确保高可用性,避免常见的陷阱,例如不当

本文讨论了ThinkPHP的内置测试框架,突出了其关键功能(例如单元和集成测试),以及它如何通过早期的错误检测和改进的代码质量来增强应用程序可靠性。

本文讨论了ThinkPHP 5和6之间的关键差异,重点是建筑,功能,性能和对遗产升级的适用性。对于传统项目和旧系统,建议使用ThinkPHP 5,而ThinkPHP 6适合新的PR

本文讨论了处理文件上传和集成在ThinkPhp中的云存储的最佳实践,重点是安全性,效率和可扩展性。
