TP 5 钩子简单理解和简单使用

Posted yxg1995

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TP 5 钩子简单理解和简单使用相关的知识,希望对你有一定的参考价值。

  

  行为(Behavior)是Thinkphp扩展机制中比较关键的一项扩展,行为既可以独立调用,也可以绑定到某个标签中进行侦听,在官方提出的CBD模式中行为也占了主要的地位,可见行为在ThinkPHP框架中意义非凡。

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

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

  看完官方文档这段话后会有一点小明白,但还是很糊涂。我理解的就是钩子行为类似laravel 框架中的中间件,可以用权限验证的这个行为来比喻,比如用户做修改操作时,需要验证这个用户是不是有权限这个行为。

简单使用: 模块目录下的behavior 下创建一个类,这个类就是钩子,而类里的方法就是行为,一个钩子可以有多个行为。

namespace appcommonehavior;
class Test
{
public function test(&$request){
echo ‘hello test‘;
}

public function run(){
echo ‘我试run方法‘;
}
}

那要如何使用呢? 有两种方法
1 可以在模块下建立app或模块目录下建立tags.php 进行绑定,绑定代码如下。红色部分是我自定义的绑定行为。
<?php

// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
// 应用行为扩展定义文件
return [
// 应用初始化
‘app_init‘ => [],
// 应用开始
‘app_begin‘ => [],
// 应用调度
‘app_dispatch‘ => [
‘app\common\behavior\Common‘,
],
// 模块初始化
‘module_init‘ => [
‘app\common\behavior\Common‘,
],
// 插件开始
‘addon_begin‘ => [
‘app\common\behavior\Common‘,
],
‘run‘ => [
‘app\common\behavior\Test‘,
],
‘test‘ =>[
‘app\common\behavior\Test‘,
],

// 操作开始执行
‘action_begin‘ => [],
// 视图内容过滤
‘view_filter‘ => [],
// 日志写入
‘log_write‘ => [],
// 应用结束
‘app_end‘ => [],
];

这里的键相当于钩子中注册的行为方法,key指定钩子文件
钩子中默认执行run方法。
调用: 注意listen 方法返回的是数组
hinkHook::listen(‘test‘); // 输出 hello testArray ( [0] => )





以上是关于TP 5 钩子简单理解和简单使用的主要内容,如果未能解决你的问题,请参考以下文章

简单理解vue的生命周期

tp5 的hook钩子 怎么用

tp5.1中gatewayworker简单使用

Vue生命周期/钩子函数的理解

简单记录一下vue生命周期及 父组件和子组件生命周期钩子执行顺序

新手php框架要先学laravel好还是tp?