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 相关文章推荐
深入解析php模板技术原理【一】
Jan 10 PHP
备份mysql数据库的php代码(一个表一个文件)
May 28 PHP
使用gd库实现php服务端图片裁剪和生成缩略图功能分享
Dec 25 PHP
用PHP代替JS玩转DOM的思路及示例代码
Jun 15 PHP
解析PHP强制转换类型及远程管理插件的安全隐患
Jun 30 PHP
destoon实现首页显示供应、企业、资讯条数的方法
Jul 15 PHP
php函数serialize()与unserialize()用法实例
Nov 06 PHP
PHP生成可点击刷新的验证码简单示例
May 13 PHP
Yii隐藏URL中index.php的方法
Jul 12 PHP
常用PHP数组排序函数归纳
Aug 08 PHP
详解PHP中的外观模式facade pattern
Feb 05 PHP
PHP文件类型检查及fileinfo模块安装使用详解
May 09 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
PHPShop存在多个安全漏洞
2006/10/09 PHP
PHP遍历二维数组的代码
2011/04/22 PHP
js window.onload 加载多个函数的方法
2009/11/02 Javascript
javascript学习笔记(四) Number 数字类型
2012/06/19 Javascript
关闭浏览器时提示onbeforeunload事件
2013/12/25 Javascript
javascript屏蔽右键代码
2014/05/15 Javascript
我的Node.js学习之路(一)
2014/07/06 Javascript
jquery获取当前元素索引值用法实例
2015/06/10 Javascript
HTML5 实现的一个俄罗斯方块实例代码
2016/09/19 Javascript
AngularJS获取json数据的方法详解
2017/05/27 Javascript
vue + vuex todolist的实现示例代码
2018/03/09 Javascript
解决$store.getters调用不执行的问题
2019/11/08 Javascript
create-react-app中添加less支持的实现
2019/11/15 Javascript
微信小程序实现上拉加载功能
2019/11/20 Javascript
Vue混入mixins滚动触底的方法
2019/11/22 Javascript
python实现从web抓取文档的方法
2014/09/26 Python
python类继承与子类实例初始化用法分析
2015/04/17 Python
Python实现并行抓取整站40万条房价数据(可更换抓取城市)
2016/12/14 Python
Python编程之基于概率论的分类方法:朴素贝叶斯
2017/11/11 Python
python调用OpenCV实现人脸识别功能
2018/05/25 Python
详解Python odoo中嵌入html简单的分页功能
2019/05/29 Python
浅谈Django+Gunicorn+Nginx部署之路
2019/09/11 Python
python将字母转化为数字实例方法
2019/10/04 Python
python实现拉普拉斯特征图降维示例
2019/11/25 Python
python 实现turtle画图并导出图片格式的文件
2019/12/07 Python
使用keras和tensorflow保存为可部署的pb格式
2020/05/25 Python
Python应用自动化部署工具Fabric原理及使用解析
2020/11/30 Python
Html5新特性用canvas标签画多条直线附效果截图
2014/06/30 HTML / CSS
荷兰网上鞋店:Ziengs.nl
2017/01/02 全球购物
西班牙第一的网上药房:PromoFarma.com
2017/04/17 全球购物
jQuery treeview树形结构应用
2021/03/24 jQuery
实习教师个人的自我评价
2013/11/08 职场文书
研发工程师的岗位职责
2013/11/18 职场文书
公司办公室岗位职责
2014/03/19 职场文书
团日活动总结格式
2015/05/11 职场文书
历史博物馆观后感
2015/06/05 职场文书