• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > 介绍thinkphp5框架中的hook机制

介绍thinkphp5框架中的hook机制

作者:站长图库 字体:[增加 减小] 来源:互联网 时间:2022-04-29

站长图库向大家介绍了thinkphp5框架,hook机制等相关知识,希望对您有所帮助

下面给大家介绍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函数的优先级)


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • ThinkPHP5框架中Redis是如何使用和封装?
  • 简析Thinkphp5框架通过模型进行增删改查
  • ThinkPHP5框架实现多数据库连接
  • 介绍thinkphp5框架中的hook机制

相关文章

  • 2022-04-29MySQL 中 InnoDB 和 MyISAM 区别
  • 2022-04-29Photoshop使用3D工具制作超酷的金属立体字
  • 2022-04-29帝国CMS7.5使用TAGSID实现伪静态调用方法
  • 2022-04-29详解Laravel如何安装FFmpeg并进行视频文件处理
  • 2022-04-29nestjs返回给前端数据格式的封装实现
  • 2022-04-29PHP中静态方法可以访问非静态方法吗
  • 2022-04-29纯CSS巧妙的实现带圆角的三角形
  • 2022-04-29CDR制作IE浏览器标志教程
  • 2022-04-29WordPress网站优化方法
  • 2022-04-29robots.txt 语法详解:*、$、?等字符的含义及用法

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • Vue+ElementUI怎么处理超大表单
    • Node.js中JSON格式和Excel格式的双向转换
    • 微信小程序wx.request使用POST请求时后端无法获取数据解决办法
    • 帝国CMS后台添加关键字时自动复制到TAGS(同步更新)的方法
    • PHP中如何使用构造方法和this关键字?如何引入构造方法?
    • 微信小程序反编译提取源代码方法
    • WordPress通过加密隐藏wp-login/admin后台默认登录地址
    • Wordpress关闭所有评论的方法
    • 33个非常实用的JavaScript一行代码,建议收藏!
    • 怎么解决phpStorm使用vue提示"Attribute v-xxx is not allowed here"的问题

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有