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 相关文章推荐
一个用于MySQL的PHP XML类
Oct 09 PHP
PHP的FTP学习(四)
Oct 09 PHP
关于PHP5 Session生命周期介绍
Mar 02 PHP
PHP生成Flash动画的实现代码
Mar 12 PHP
PHP操作Memcache实例介绍
Jun 14 PHP
PHP获取MSN好友列表类的实现代码
Jun 23 PHP
PHP的拦截器实例分析
Nov 03 PHP
thinkPHP中多维数组的遍历方法
Jan 09 PHP
Symfony2开发之控制器用法实例分析
Feb 05 PHP
CI框架(ajax分页,全选,反选,不选,批量删除)完整代码详解
Nov 01 PHP
[原创]php实现数组按拼音顺序排序的方法
May 03 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
Feb 11 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
超级简单的发送邮件程序
2006/10/09 PHP
PHP将XML转数组过程详解
2013/11/13 PHP
php中动态调用函数的方法
2015/03/16 PHP
Laravel5框架自定义错误页面配置操作示例
2019/04/17 PHP
php让json_encode不自动转义斜杠“/”的方法
2020/04/27 PHP
JavaScript读取中文cookie时的乱码问题的解决方法
2009/10/14 Javascript
JavaScript中使用Callback控制流程介绍
2015/03/16 Javascript
简单对比分析JavaScript中的apply,call与this的使用
2015/12/04 Javascript
jQuery获取checkbox选中的值
2016/01/28 Javascript
JS获取鼠标选中的文字
2016/08/10 Javascript
使用Require.js封装原生js轮播图的实现代码
2017/06/15 Javascript
解决v-for中使用v-if或者v-bind:class失效的问题
2018/09/25 Javascript
JS实现数组去重及数组内对象去重功能示例
2019/02/02 Javascript
详解写好JS条件语句的5条守则
2019/02/28 Javascript
JS中的防抖与节流及作用详解
2019/04/01 Javascript
详解vuejs中执行npm run dev出现页面cannot GET/问题
2020/04/26 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛 DT VS HGT
2014/05/22 DOTA
[29:23]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场1
2014/05/23 DOTA
[27:28]Ti4 冒泡赛第二天 iG vs NEWBEE 1
2014/07/15 DOTA
Python根据区号生成手机号码的方法
2015/07/08 Python
Python字符编码与函数的基本使用方法
2017/09/30 Python
python中web框架的自定义创建
2019/09/08 Python
CSS去掉A标签(链接)虚线框的方法
2014/04/01 HTML / CSS
Myprotein蛋白粉美国官网:欧洲畅销运动营养品牌
2016/11/15 全球购物
世界上最大的餐具公司:Oneida
2016/12/17 全球购物
美国知名的摄影器材销售网站:Adorama
2017/02/01 全球购物
香蕉共和国加拿大官网:Banana Republic加拿大
2018/08/06 全球购物
意大利中国电子产品购物网站:Geekmall.com
2019/09/30 全球购物
《美丽的小兴安岭》教学反思
2014/02/26 职场文书
学期评语大全
2014/04/30 职场文书
2014年药店工作总结
2014/11/20 职场文书
学习雷锋精神活动总结
2015/02/06 职场文书
简单的辞职信范文(2016最新版)
2015/05/12 职场文书
2016年五一促销广告语
2016/01/28 职场文书
坚持不是死撑,更重要的是心态
2019/08/19 职场文书
教你怎么用Python实现GIF动图的提取及合成
2021/06/15 Python