TP5 Hook使用

tech2025-04-24  9

一 先创建行为的类 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200904091520143.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTg2NTQ2OQ==,size_16,color_FFFFFF,t_70#pic_center) <?php namespace app\admin\behavior; use think\Db; //use think\Queue; /** * 悬赏审核通过处理 * Class TaskAuditSuccess * @package app\task\behavior */ class TaskAuditSuccess { public function run($param) { DB::name("test")->insert(['context'=>$param]); print_r('HOOK执行成功'); } }

二 .自定义行为扩展

<?php // 应用行为扩展定义文件 return [ 'test_success'=>['app\admin\behavior\TaskAuditSuccess'],//'test_success'=>[\app\admin\behavior\TaskAuditSuccess::class], ];

三 .使用Hook 进行行为监听

<?php /** * @Author: Davax<23136891@qq.com> * @Date: 2020-04-28 09:32:29 * @Last Modified by: zhangyan * @Last Modified time: 2020-09-04 09:19:36 */ namespace app\admin\Controller; use think\Db; use think\Controller; use think\request; use think\facade\Hook; Class Index extends Controller{ public function index(){ Hook::listen('test_success','paramzidingyi'); $data = Db::name('test')->select(); //print_r($data); return view('admin/index'); } }

浏览器执行 http://www.tp51.com/index.php/admin/index/index 看到数据库加了数据 扩展 也可以在控制器或需要绑定的地放直接 public function index1(){ Hook::exec(‘app\admin\behavior\Test’,‘run’); } 这样tags就不用定义了

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200904093416316.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTg2NTQ2OQ==,size_16,color_FFFFFF,t_70#pic_center

补充 手动注册行为 自定义注册行为

/*自定义注册行为 start*/ public function index2(){ $title = '我是title'; Hook::add('index','app\\admin\\behavior\\Test'); //标签位index在行为类Test方法列表中,所以执行fun1方法,即使标签位定义为FUn1,照样执行 //var_dump(Hook::listen('index',$title)); /*标签位index2 不在行为类Test方法列表 默认执行 run方法,若run方法也不存在 则 报错*/ Hook::add('index2','app\admin\behavior\Test'); //var_dump(Hook::listen('index2',$title)); //标签位驼峰命名法 tp5.0.4版本以上,如果行为类Test中方法采用驼峰法命名,要想标签位与之对应,则写成test_order Hook::add('index_test','app\admin\behavior\Test'); var_dump(Hook::listen('index_test',$title)); } /*end*/

以上就是自定义行为方法使用了

最新回复(0)