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自动获取字符串编码函数mb_detect_encoding
May 31 PHP
深入Memcache的Session数据的多服务器共享详解
Jun 13 PHP
PHP中的插件机制原理和实例
Jul 08 PHP
PHP文件读取功能的应用实例
May 08 PHP
PHP扩展开发教程(总结)
Nov 04 PHP
基于ThinkPHP实现批量删除
Dec 18 PHP
将PHP程序中返回的JSON格式数据用gzip压缩输出的方法
Mar 03 PHP
PHP-CGI远程代码执行漏洞分析与防范
May 07 PHP
thinkPHP通用控制器实现方法示例
Nov 23 PHP
PHP实现上传图片到数据库并显示输出的方法
May 31 PHP
php微信分享到朋友圈、QQ、朋友、微博
Feb 18 PHP
laravel 解决后端无法获取到前端Post过来的值问题
Oct 22 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 checkbox复选框值的获取与checkbox默认值输出方法
2010/05/15 PHP
PHP zip扩展Linux下安装过程分享
2014/05/05 PHP
PHP 使用redis简单示例分享
2015/03/05 PHP
详解PHP中websocket的使用方法
2016/09/15 PHP
PHP使用Curl实现模拟登录及抓取数据功能示例
2018/04/27 PHP
php框架CodeIgniter主从数据库配置方法分析
2018/05/25 PHP
在JavaScript中使用timer示例
2014/05/08 Javascript
TypeError document.getElementById(...) is null错误原因
2015/05/18 Javascript
在JavaScript中操作时间之getMonth()方法的使用
2015/06/10 Javascript
JavaScript实现LI列表数据绑定的方法
2015/08/04 Javascript
jQuery文字横向滚动效果的实现代码
2016/05/31 Javascript
jQuery原理系列-css选择器的简单实现
2016/06/07 Javascript
基于JQuery实现的跑马灯效果(文字无缝向上翻动)
2016/12/02 Javascript
浅析如何利用angular结合translate为项目实现国际化
2016/12/08 Javascript
touch.js 拖动、缩放、旋转 (鼠标手势)功能代码
2017/02/04 Javascript
javascript自执行函数
2017/02/10 Javascript
关于不同页面之间实现参数传递的几种方式讨论
2017/02/13 Javascript
详解vue添加删除元素的方法
2018/06/30 Javascript
react结合bootstrap实现评论功能
2020/05/30 Javascript
[06:53]DOTA2每周TOP10 精彩击杀集锦vol.3
2014/06/25 DOTA
[01:56]无止竞 再出发——中国军团出征2017年DOTA2国际邀请赛
2017/07/05 DOTA
Python的另外几种语言实现
2015/01/29 Python
Python使用multiprocessing实现一个最简单的分布式作业调度系统
2016/03/14 Python
总结网络IO模型与select模型的Python实例讲解
2016/06/27 Python
Python实现随机选择元素功能
2017/09/14 Python
python安装pil库方法及代码
2019/06/25 Python
python数据类型之间怎么转换技巧分享
2019/08/20 Python
美国知名的女性服饰品牌:LOFT(洛芙特)
2016/08/05 全球购物
香港万宁官方海外旗舰店:香港健与美连锁店
2018/09/27 全球购物
俄罗斯花园种植材料批发和零售网上商店:Беккер
2019/07/22 全球购物
Java软件工程师综合面试题笔试题
2013/09/08 面试题
学生个人的自我评价分享
2013/11/05 职场文书
新闻编辑求职信
2014/04/09 职场文书
群众路线领导干部个人对照检查材料(集锦)
2014/09/23 职场文书
五好家庭事迹材料
2014/12/20 职场文书
道德与公民自我评价
2015/03/09 职场文书