thinkPHP中钩子的使用方法实例分析


Posted in PHP onNovember 16, 2017

本文实例讲述了thinkPHP中钩子的使用方法。分享给大家供大家参考,具体如下:

前面介绍过thinkPHP中钩子的两种配置调用方法,这里来进一步分析一下钩子的使用方法。

1 创建钩子行为:

我们自己定义的标签位可以直接放在Think\Behaviors中,也可以放在应用目录中,比如说Home模块下,新建一个Behaviors的文件夹,在文件夹内新建

标签名+Behavior.class.PHP

注:需要带Behavior的原因,见代码:

static public function exec($name, $tag,&$params=NULL) {
    if('Behavior' == substr($name,-8) ){
      // 行为扩展必须用run入口方法
      $tag  =  'run';
    }
    $addon  = new $name();
    return $addon->$tag($params);
}

在这里我自己自定义的标签名是My

namespace Behavior;
use Think\Behavior;
class MyBehavior extends Behavior
{
  public function run(&$arg){
    echo 'Thinkphp 中的'.$arg['name'].'功能,'.$arg['value'].'中...';
  }
}

注意类名大小写

2 将钩子添加进钩子集中

方法一(手动注册):直接在控制器中添加:

Hook::add('addd','Behavior\\adBehavior');

方法二(自动注册):

在Conf文件夹里面(完整路径D:\think\application\Home\Conf\tags.php,当然这是我的情况)tags.php的内容:

return array(
//'action_begin'=>array('Home\\Behaviors\\test','Home\\Behaviors\\test'),
 //一个标签位可以有多个行为,使用数组即可。
 // 如果是3.2.1版本 则需要改成
 // 'action_begin'=>array('Home\\Behaviors\\testBehavior','Home\\Behaviors\\testBehavior'),
 'my'=>array('Behaviors\\MyBehavior')
);

3 添加监听:(我这里才用模板中直接监听使用)

此处如果报找不到hook方法,请在ThinkPHP/Common/functions.php中添加(当然也可以在其他公共文件):

function hook($hook,$params= array()){
  \Think\Hook::listen($hook,$params);
}

最后在模板中使用:

{:hook('my', array('name'=>'钩子','value'=>'学习'))}

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
建立文件交换功能的脚本(一)
Oct 09 PHP
使用adodb lite解决问题
Dec 31 PHP
CentOS6.5 编译安装lnmp环境
Dec 21 PHP
PHP异常处理浅析
May 12 PHP
调试WordPress中定时任务的相关PHP脚本示例
Dec 10 PHP
php防止sql注入的方法详解
Feb 20 PHP
完美解决thinkphp唯一索引重复时出错的问题
Mar 31 PHP
PHP实现的折半查询算法示例
Oct 09 PHP
PHP7扩展开发之hello word实现方法详解
Jan 15 PHP
PHPExcel 修改已存在Excel的方法
May 03 PHP
Phpstorm+Xdebug断点调试PHP的方法
May 14 PHP
Laravel 验证码认证学习记录小结
Dec 20 PHP
php表单处理操作
Nov 16 #PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
Nov 16 #PHP
Laravel下生成验证码的类
Nov 15 #PHP
Ajax中的JSON格式与php传输过程全面解析
Nov 14 #PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
Nov 14 #PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
Nov 14 #PHP
PHP中递归的实现实例详解
Nov 14 #PHP
You might like
Laravel 5 学习笔记
2015/03/06 PHP
php微信开发之关注事件
2018/06/14 PHP
PHP大文件切割上传功能实例分析
2019/07/01 PHP
jquery 单引号和双引号的区别及使用注意
2013/07/31 Javascript
artDialog双击会关闭对话框的修改过程分享
2013/08/05 Javascript
创建js对象和js类的方法汇总
2014/12/24 Javascript
JavaScript动态提示输入框输入字数的方法
2015/07/27 Javascript
解决angular的post请求后SpringMVC后台接收不到参数值问题的方法
2015/12/10 Javascript
Bootstrap Modal遮罩弹出层(完整版)
2016/11/21 Javascript
Sequelize中用group by进行分组聚合查询
2016/12/12 Javascript
JS实现将对象转化为数组的方法分析
2019/01/21 Javascript
JavaScript中的回调函数实例讲解
2019/01/27 Javascript
Vue程序化的事件监听器(实例方案详解)
2020/01/07 Javascript
Node.js 在本地生成日志文件的方法
2020/02/07 Javascript
[00:37]DOTA2上海特级锦标赛 Secert 战队宣传片
2016/03/03 DOTA
[03:07]完美世界DOTA2联赛PWL DAY10 决赛集锦
2020/11/11 DOTA
使用python绘制人人网好友关系图示例
2014/04/01 Python
浅谈django model postgres的json字段编码问题
2018/01/05 Python
Python中的默认参数实例分析
2018/01/29 Python
Python列表推导式、字典推导式与集合推导式用法实例分析
2018/02/07 Python
python3.7简单的爬虫实例详解
2019/07/08 Python
Django集成celery发送异步邮件实例
2019/12/17 Python
pycharm不能运行.py文件的解决方法
2020/02/12 Python
Python绘制全球疫情变化地图的实例代码
2020/04/20 Python
python else语句在循环中的运用详解
2020/07/06 Python
Python如何重新加载模块
2020/07/29 Python
加拿大休闲和工业服装和鞋类零售商:L’Équipeur
2018/01/12 全球购物
Lancer Skincare官方网站:抗衰老皮肤护理
2020/11/20 全球购物
关键字final的用法
2013/10/02 面试题
毕业生应聘幼儿园的自荐信
2013/11/20 职场文书
继承权公证书
2014/04/09 职场文书
公司向个人借款协议书范本
2014/10/09 职场文书
孙振耀退休感言
2015/08/01 职场文书
MySQL Innodb索引机制详细介绍
2021/11/23 MySQL
Axios代理配置及封装响应拦截处理方式
2022/04/07 Vue.js
MySQL中EXPLAIN语句及用法
2022/05/20 MySQL