Thinkphp5进阶——04 钩子和行为

本文详细介绍了ThinkPHP5框架中钩子(生命周期)和行为(事件)的概念,通过实例展示了从最低成本使用到动态绑定行为的逐步进阶过程。在系统内置钩子的基础上,讲解了如何创建行为类并监听自定义钩子,同时探讨了控制器中动态绑定行为的方法,旨在帮助开发者更好地理解和应用钩子与行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


概述

如果你是从前端转过来的,一定对钩子这个词汇感觉很陌生,而且会很难理解为什么叫做钩子

但如果我说生命周期,相信你们肯定不会陌生。

其实这个所谓的钩子,就相当于前端很多框架里的讲述生命周期

行为,其实就是事件

一个钩子(生命周期)可以绑定多个行为(事件),反过来一个行为也可以注册到多个钩子(生命周期)上面。


本文章将采取层层递进的方式,讲述如何使用钩子和行为。

由最低使用条件,往个性化逐步增加复杂度。





系统内置钩子

在这里插入图片描述





最低成本使用


步骤:

1. 钩子绑定行为

application目录的tags.php文件,任意选择一个系统内置钩子进行行为绑定。

注意格式,比如你要绑定的行为类的是app\index\behavior\AopTry,格式要和下图所示相同。


// 应用初始化钩子
'app_init'     => [
	'app\\index\\behavior\\AopTry'
],



2. 创建行为类

index目录创建behavior文件夹,behavior目录下创建AopTest.php类文件。


namespace app\index\behavior;


class AopTry
{
    public function run($params){
        echo '我是index模块下app_init钩子绑定的行为————AopTest';
    }
}


上面这种形式可以最快实现钩子绑定行为,特别需要注明的是:

AopTry行为类的的方法名,如果你只需要定义了一个行为方法的话,可以取名为run

否则的话,方法名就是钩子名称的驼峰命名(首字母小写)。

所以,上面的例子里面其实方法名也可以取appInit





监听自定义钩子


步骤:

1. 钩子绑定行为

application目录的tags.php文件,任意选择一个系统内置钩子进行行为绑定。

这一步和之前最低成本使用一致,不做描述。



2. 创建行为类


namespace app\index\behavior;


class AppLove
{
	public function run($params){
	  echo '我是app_love钩子的行为,yeah';
	  exit;
	}
}



3. 控制器监听钩子

1)引用think\facade\Hook;

2)使用Hook::listen(‘钩子名’)监听。


namespace app\index\controller;

use think\facade\Hook;

class Index
{
    public function index()
    {
        // 监听钩子
        Hook::listen('app_love');
		.....
	}
}





动态绑定行为


步骤:

1. 控制器动态绑定行为

主要使用到了Hook::add('钩子名','行为类'),这里需要特别注意第二个参数和前面最低成本使用的格式是一样的。

其实这一步做的工作就是上面2个例子在tags.php做的动作,而且个人认为把绑定行为的动作写在tags.php会更加方便日后查问题。


2. 控制器监听钩子

这里和监听自定义钩子例子的一致,不做赘述。


3. 创建行为类
这里和监听自定义钩子例子的一致,不做赘述。



控制器代码


use think\facade\Hook;


class Index
{
	public function index()
	{
		// 1.动态绑定行为
		Hook::add('app_love','app\index\behavior\AppLove');
        
		// 2.监听钩子
		Hook::listen('app_love');
        ...
    }
}

需要特别注意的一点是,一定要先绑定行为,然后才监听,否则程序将出错。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值