一.什么叫做钩子

我们可以首先从字面上了解钩子,钩子是干什么的呢?日常生活中,我们的钩子是用来钩住某种东西的,比如,说,鱼钩是用来钓鱼的,一旦鱼咬了钩,钩子就一直钩住鱼了,任凭鱼在水里怎么游,也逃不出鱼钩的控制。同样的,Windows的钩子Hook也是用来钩东西的,比较抽象的是他是用来钩Windows事件或者消息的。最常见的就是鼠标和键盘钩子,用Hook钩子钩住鼠标、键盘,当你的鼠标、键盘有任何操作时,通过Hook就能知道他们都做了什么了,多么形象啊,把老鼠Mouse钩住了,不管你干什么,都逃不过我钩子Hook的手掌心。
技术上讲,钩子(Hook)是Windows消息处理机制的一个很重要的内容,谁叫Windows是基于消息的呢。应用程序可以通过钩子机制截获处理Window消息或是其他一些特定事件。

ThinkPHP中的行为是一个比较抽象的概念,你可以把行为想象成在应用执行过程中的一个动作。在框架的执行流程中,例如路由检测是一个行为,静态缓存是一个行为,用户权限检测也是行为,大到业务逻辑,小到浏览器检测、多语言检测等等都可以当做是一个行为,甚至说你希望给你的网站用户的第一次访问弹出Hello,world!这些都可以看成是一种行为,把这些行为抽离出来的目的是为了让你无需改动框架和应用,而在外围通过扩展或者配置来改变或者增加一些功能。

而不同的行为之间也具有位置共同性,比如,有些行为的作用位置都是在应用执行前,有些行为都是在模板输出之后,我们把这些行为发生作用的位置称之为钩子,当应用程序运行到这个钩子的时候,就会被拦截下来,统一执行相关的行为,类似于AOP编程中的“切面”的概念,给某一个钩子绑定相关行为就成了一种类AOP编程的思想。

一个钩子可以注册多个行为,执行到某个钩子位置后,会按照注册的顺序依次执行相关的行为。但在某些特殊的情况下,你可以设置某个钩子只能执行一次行为,又或者你可以在一个钩子的某个行为中返回false来强制终止后续的行为执行;一个行为可以同时注册到多个不同的钩子上,完全看应用的需求来设计。

钩子的位置必须是事先设计好的,无论是框架还是应用的,要设置一个钩子,只需要在相关的位置添加一行代码(事先需要引入think\facade\Hook类)

二代码演示

1.下载安装thinkphp5.1框架

  composer create-project topthink/think=5.1.* tp5.1

2.创建一个行为文件夹behavior,用来存放各种用户行为

3.在behavior中建立一个Test.php


4.在控制器中注入监听钩子

5.访问测试

参考文章:
https://www.kancloud.cn/manual/thinkphp5_1/354129

thinkphp5.1的行为钩子相关推荐

  1. ThinkPHP5.1 Hook(钩子)的理解及应用示例

    摘要 近期在对后台系统的优化过程中, 了解到 ThinkPHP5 框架所提供的 钩子 行为记录的技巧使用 感觉在代码规范.AOP (面向切面编程)上都很有值得借鉴的地方 在此进行整理一番,希望帮到有需 ...

  2. 不用登陆直接购买php,关于DISCUZ不用通行证登陆得内容介绍

    关于DISCUZ不用通行证登陆得内容介绍 更新时间:2008年10月04日 15:56:39   作者: DISCUZ是中国最常用的论坛,虽然他本身有通行证给大家连接,但实际上用户的统一还是很不好,经 ...

  3. 第37课 thinkphp5添加商品基本信息及通过前置钩子上传商品主图 模型事件(勾子函数)...

    目录 手册地址: before_insert(新增之前的操作) 要实现的功能 思路 触发条件: 1. 控制器里必须要调用模型的save()方式保存数据,用insert()触发不了勾子函数的 2. 模型 ...

  4. Thinkphp5.0行为钩子Hook的用法

    什么是行为钩子? 行为 可以把行为想象成在应用执行过程中的一个动作.例如在框架的执行流程中,路由检测.静态缓存.用户权限检测是一个行为,大到业务逻辑,小到浏览器检测.多语言检测等都可以当做是一个行为. ...

  5. php上传商品信息并显示,第37课 thinkphp5添加商品基本信息及通过前置钩子上传商品主图 模型事件(勾子函数)...

    [TOC] 手册地址: before_insert(新增之前的操作) 要实现的功能 上传原图片,在新增数据之前生成三张缩略图片,然后再插入数据 添加商品基本信息及通过后置钩子上传商品主图 思路 控制器 ...

  6. 前台模板 海豚php_GitHub - cbw1820446/DolphinPHP: 海豚PHP——快速开发框架(基于ThinkPHP5.0.3)...

    DolphinPHP DophinPHP(海豚PHP)是一个基于ThinkPHP5.0.3开发的一套开源PHP快速开发框架,DophinPHP秉承极简.极速.极致的开发理念,为开发集成了基于数据-角色 ...

  7. php 静态扩展,thinkphp5行为扩展实现html静态缓存设置

    thinkphp5行为扩展实现html静态缓存设置 2018-06-19 11:53:10ThinkPHP thnkphp5行为扩展html静态缓存 利用钩子thinkphp钩子进行行为扩展.先上本地 ...

  8. php layui 框架,Thinkphp5+Layui高颜值内容管理框架

    Thinkphp5+Layui高颜值内容管理框架 TP5+Layui高颜值内容管理框架,新增API模块 Thinkphp5+Layui响应式后台权限管理系统 专注打造好用的框架,极速开发,高效灵活,从 ...

  9. 微信砍价 php,GitHub - YInJunWen/bcwx: vue2+thinkPHP5.1 前后端分离的微信砍价

    vue2+thinkPHP5.1 前后端分离的微信砍价活动 需求: 微信公众号网页授权识别用户身份 选择商品进行分享 帮助砍价的用户可以帮助砍价(有活动时间限制,只能帮助同一个人砍价一次,砍价商品有最 ...

最新文章

  1. 【转】【CUBE】Oracle分组函数之CUBE魅力
  2. php判断手机浏览器,PHP环境下判断客户端是否为手机浏览器
  3. windows卸载程序提示“请等待当前程序完成卸载或更改“问题解决方法,windows卸载卡进程问题解决方法
  4. java切换系统输入法_java - 关于Android输入法切换的问题
  5. 【CodeForces - 208C 】Police Station(单源最短路条数,起点终点建图,枚举顶点)
  6. 看门狗性能软件测试,《看门狗:军团》PC版性能测试 不建议光追,优化极差
  7. 开发转测试没人要_iOS13beta8发布,微信再次测试新功能
  8. java web框架 django_django——web框架简介
  9. python pip 安装
  10. python 匿名函数装饰器
  11. 网关转发其他微服务后头信息拿不到_微服务之基于Zuul自研服务网关
  12. LaTeXila:Linux 的多语言 LaTeX 编辑器简介
  13. python判断完美数_Python识别完美数
  14. 如何从0到1搭建业务架构?
  15. 2022年考研华中科技大学计算机学院硕士后记
  16. GF(256)下的乘法
  17. Codeforces 417D Cunning Gena(状压DP)
  18. micropython stm32f107_stm32f107 USART3数据接收错误问题
  19. iTween那些事儿(二)
  20. 图书管理系统之用户信息维护

热门文章

  1. 华为手机Android系统优缺点,华为手机与iPhone相比有哪些优缺点?
  2. java Char与char_JAVAc++中char和char[]的区别
  3. 使用 Symfony DomCrawler 进行爬虫 已解决
  4. 计算机职称级别一览表,2017高会《职称计算机》Word 2003:多级列表
  5. 什么叫克隆人_什么是克隆技术?
  6. 【深度观察】深度学习技术其实没那么美好
  7. 深入了解示波器(一):示波器分类
  8. webpack将部分图片打包后转化为base64
  9. 电脑双网卡共享给其他电脑上网的方法
  10. kubeadm安装Kubernetes-1.6.1集群