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 5.0对象模型深度探索之对象复制
Mar 27 PHP
php简单对象与数组的转换函数代码(php多层数组和对象的转换)
May 18 PHP
解析php中获取url与物理路径的总结
Jun 21 PHP
PHP与javascript实现变量交互的示例代码
Jul 23 PHP
php 表单提交大量数据发生丢失的解决方法
Mar 03 PHP
PHP输出英文时间日期的安全方法(RFC 1123格式)
Jun 13 PHP
ThinkPHP V2.2说明文档没有说明的那些事实例小结
Jul 01 PHP
thinkphp3.x中session方法的用法分析
May 20 PHP
php实现的一段简单概率相关代码
May 30 PHP
php获取访问者浏览页面的浏览器类型
Jan 23 PHP
PHP房贷计算器实例代码,等额本息,等额本金
Apr 01 PHP
thinkphp5 URL和路由的功能详解与实例
Dec 26 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
PHP源代码数组统计count分析
2011/08/02 PHP
解析php中mysql_connect与mysql_pconncet的区别详解
2013/05/15 PHP
实现在同一方法中获取当前方法中新赋值的session值解决方法
2014/06/26 PHP
js兼容的placeholder属性详解
2013/08/18 Javascript
javascript与cookie 的问题详解
2013/11/11 Javascript
jquery xMarquee实现文字水平无缝滚动效果
2014/04/29 Javascript
JavaScript实现找质数代码分享
2015/03/24 Javascript
javascript实现拖放效果
2015/12/16 Javascript
JS实现HTML表格排序功能
2016/08/05 Javascript
微信小程序 获取session_key和openid的实例
2017/08/17 Javascript
vue中的计算属性的使用和vue实例的方法示例
2017/12/04 Javascript
Vue中使用create-keyframe-animation与动画钩子完成复杂动画
2019/04/09 Javascript
详解JS实现系统登录页的登录和验证
2019/04/29 Javascript
vue+vant实现购物车全选和反选功能
2020/11/17 Vue.js
Vue router传递参数并解决刷新页面参数丢失问题
2020/12/02 Vue.js
NodeJS和浏览器中this关键字的不同之处
2021/03/03 NodeJs
python中from module import * 的一个坑
2014/07/20 Python
Python的Django REST框架中的序列化及请求和返回
2016/04/11 Python
Python实现字符串格式化输出的方法详解
2017/09/20 Python
Python基于Flask框架配置依赖包信息的项目迁移部署
2018/03/02 Python
对Python中Iterator和Iterable的区别详解
2018/10/18 Python
python两个_多个字典合并相加的实例代码
2019/12/26 Python
Python3+Selenium+Chrome实现自动填写WPS表单
2020/02/12 Python
python3中for循环踩过的坑记录
2020/12/14 Python
python 实现IP子网计算
2021/02/18 Python
html2canvas生成清晰的图片实现打印的示例代码
2019/09/30 HTML / CSS
俄罗斯眼镜网: optikaworld
2016/07/31 全球购物
美国生鲜及杂货电商:FreshDirect
2018/01/29 全球购物
老总助理工作岗位职责
2014/02/06 职场文书
学习决心书
2014/03/11 职场文书
员工试用期考核自我鉴定
2014/04/13 职场文书
预防艾滋病宣传标语
2014/06/25 职场文书
营业员岗位职责
2015/02/11 职场文书
python 实现定时任务的四种方式
2021/04/01 Python
微信小程序实现录音Record功能
2021/05/09 Javascript
PyQt5结合QtDesigner实现文本框读写操作
2021/06/11 Python