TP5.1 钩子与行为应用
什么是行为:
可以将行为理解为是一个行为类的方法,在框架中行为类、行为方法则是有一定的规则约定;而钩子则是这些行为方法被调用执行的位置点。注意了,要想执行某个钩子中的行为,那行为一定要在应用程序执行到该钩子之前进行绑定
特点:
一个钩子可以绑定多个行为,执行到某个钩子位置后,会按照绑定的顺序依次执行相关的行为。
在某种特殊情况下,可以设置某个钩子只能执行一次行为,或者是设置在一个钩子的某个行为返回false来强制终止后续的行为执行。
一个行为同样可以被绑定到多个不同钩子。
官方预定义了一些钩子,方便我们在程序中直接使用,在application目录下的tag.php中,我们只需要在对应的钩子下绑定行为即可生效,例如:
// 应用初始化
'app_init' => ['\\app\\index\\behavior\\Test'],
当程序初始化时会执行 \app\index\behavior\Test 类的 run 方法
我们也可以自定义钩子,在tag.php中添加自定义钩子
'my_action' => ['\\app\\index\\behavior\\Test'],
然后在程序对应的位置监听这个钩子,当程序执行到这里是会自动触发钩子
public function hello($name = 'ThinkPHP5') {
\think\facade\Hook::listen("my_action");
return 'hello,' . $name;
}
TP5.1 钩子与行为应用的更多相关文章
- tp5系统核心设计提供了一些可能会需要的钩子(位置)
钩子 描述 参数 app_init 应用初始化标签位 无 app_begin 应用开始标签位 当前调度信息 module_init 模块初始化标签位 当前请求对象实例 action_begin ...
- tp5中“前置操作”和“钩子函数”的区别
1.实行顺序: 以下都是标为删除前的操作: 点击删除 -> 前置操作 -> 删除方法(用模型删除) -> 触发钩子函数(删除) -> 删除成功 2.传入的参数: ...
- 框架Thinkphp5 简单的实现行为 钩子 Hook
这篇文章主要介绍了关于框架Thinkphp5 简单的实现行为 钩子 Hook,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 实现在一个方法开始和结束加入两个行为:api_init.ap ...
- TP5使用Redis处理电商秒杀
本篇文章介绍了ThinkPHP使用Redis实现电商秒杀的处理方法,具有一定的参考价值,希望对学习ThinkPHP的朋友有帮助! TP5使用Redis处理电商秒杀 1.首先在TP5中创建抢购活动所需要 ...
- XSS 前端防火墙 —— 无懈可击的钩子
昨天尝试了一系列的可疑模块拦截试验,尽管最终的方案还存在着一些兼容性问题,但大体思路已经明确了: 静态模块:使用 MutationObserver 扫描. 动态模块:通过 API 钩子来拦截路径属性. ...
- java的关闭钩子(Shutdown Hook)
Runtime.getRuntime().addShutdownHook(shutdownHook); 这个方法的含义说明: 这个方法的意思就是在jvm中增加一个关闭的钩子,当jv ...
- TP5.0源生Excel导出
PHPExcel类在TP5里边并不能很好的兼容,使用起来很麻烦. 不像是tp3.2那样直接import()加进来就能new,因为它里边的命名空间找不到.总是说undefined class. 如果是使 ...
- JAVA 虚拟机钩子
Shutdown Hook Java程序经常也会遇到进程挂掉的情况,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的代码.JAVA中的ShutdownHook提供了比较好的 ...
- PHP钩子机制
什么是钩子 大家想必听过插件,wordpress插件特别多,这个就是用钩子机制实现的. 当代码在运行的过程中,我们预先在运行的几个特殊点里执行一些特殊方法:例如在运行方法(例如Blog::add的ad ...
随机推荐
- L332 NBA: Dwyane Wade and Dirk Nowitzki Say Emotional Goodbyes
Two games in the NBA ended amid emotional scenes on Tuesday as legends at separate teams marked thei ...
- Python 进程池的同步方法和异步方法
import time from multiprocessing import Process,Pool def f1(n): time.sleep(0.5) # print(n) return n* ...
- C# ComboBoxTree控件
这个控件,百度.codeproject等,能查到更好的解答和代码.写这个,是因为,我在3个小时内,没有看懂接手项目,原有的TreeCombox自定义代码逻辑.而我觉得很有必要改动它.因为新弄得网页端很 ...
- nginx的变量参数 详解
$args #请求中的参数值 $query_string #同 $args $arg_NAME #GET请求中NAME的值 $is_args #如果请求中有参数,值为"?",否则为 ...
- C语言求行列式的值
#include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <window ...
- 11.python描述符---类的装饰器---@property
描述符1.描述符是什么:描述符本质就是一个新式类,在这个新式类中,至少实现了__get__(),__set__(),__delete__()这三个内置方法中的一个,描述符也被称为描述符协议(1):__ ...
- c# .net 面试总结
一. sql优化 . 写明查询具体某几列,减少*的使用,表名过长时,尽量使用表的别名 *和列名一样 ,在业务密集的SQL当中尽量不采用IN操作符,用EXISTS 方案代替. in 和 exists的区 ...
- SUID、SGID、粘滞位
粘滞位(Stikybit) +t,只有用户自己可以删除自己创建文件,其他用户只能查看,不能删除. 1:创建两个用户 useradd oo ...
- 浅谈JS的数组遍历方法
用过Underscore的朋友都知道,它对数组(集合)的遍历有着非常完善的API可以调用的,_.each()就是其中一个.下面就是一个简单的例子: var arr = [1, 2, 3, 4, 5]; ...
- 【转】C++中嵌入python程序——参数传递
C++中嵌入python程序——参数传递 前面两篇博客已经介绍如何在C++中嵌套使用 python,但是在实际使用中,我们需要向python传递各种各样的参数,这样的程序才具有更高的灵活性.下面简单介 ...