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 相关文章推荐
攻克CakePHP系列一 连接MySQL数据库
Oct 22 PHP
PHP面向接口编程 耦合设计模式 简单范例
Mar 23 PHP
基于session_unset与session_destroy的区别详解
Jun 03 PHP
codeigniter教程之多文件上传使用示例
Feb 11 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十一)
Jun 25 PHP
php构造函数的继承方法
Feb 09 PHP
PHP获取文件夹大小函数用法实例
Jul 01 PHP
ThinkPHP中数据操作案例分析
Sep 27 PHP
PHP获取昨天、今天及明天日期的方法
Feb 03 PHP
yii2 modal弹窗之ActiveForm ajax表单异步验证
Jun 13 PHP
PHP弱类型语言中类型判断操作实例详解
Aug 10 PHP
PHP实现求两个字符串最长公共子串的方法示例
Nov 17 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
用header 发送cookie的php代码
2007/03/16 PHP
php实现过滤UBB代码的类
2015/03/12 PHP
PHP入门教程之日期与时间操作技巧总结(格式化,验证,获取,转换,计算等)
2016/09/11 PHP
HTML中事件触发列表与解说
2007/07/09 Javascript
Google的跟踪代码 动态加载js代码方法应用
2012/11/12 Javascript
js 剪切板应用clipboardData详细解析
2013/12/17 Javascript
javascript中的nextSibling使用陷(da)阱(keng)
2014/05/05 Javascript
火狐下input焦点无法重复获取问题的解决方法
2014/06/16 Javascript
JS实现页面数据无限加载
2016/09/13 Javascript
javascript 实现动态侧边栏实例详解
2016/11/11 Javascript
让div运动起来 js实现缓动效果
2017/07/06 Javascript
jQuery 循环遍历改变a标签的href(实例讲解)
2017/07/12 jQuery
老生常谈js中的MVC
2017/07/25 Javascript
浅谈React Native 中组件的生命周期
2017/09/08 Javascript
BootStrap数据表格实例代码
2017/09/13 Javascript
使用use注册Vue全局组件和全局指令的方法
2018/03/08 Javascript
JavaScript实现浅拷贝与深拷贝的方法分析
2018/07/05 Javascript
实例详解vue.js浅度监听和深度监听及watch用法
2018/08/16 Javascript
浅谈Webpack多页应用HMR卡住问题
2019/04/24 Javascript
详解基于mpvue微信小程序下载远程图片到本地解决思路
2019/05/16 Javascript
详解mpvue实现对苹果X安全区域的适配
2019/07/31 Javascript
[52:15]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS LGD-GAMING
2014/05/23 DOTA
[51:28]EG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/16 DOTA
Python实现命令行通讯录实例教程
2016/08/18 Python
详解python中字典的循环遍历的两种方式
2017/02/07 Python
简单易懂的python环境安装教程
2017/07/13 Python
Python基于贪心算法解决背包问题示例
2017/11/27 Python
从numpy数组中取出满足条件的元素示例
2019/11/26 Python
Python基础之高级变量类型实例详解
2020/01/03 Python
Python-openCV开运算实例
2020/07/05 Python
Pycharm配置autopep8实现流程解析
2020/11/28 Python
使用layui框架实现点击左侧导航切换右侧内容且右侧选项卡跟随变化的效果
2020/11/10 HTML / CSS
英国羊皮鞋类领先品牌:Just Sheepskin
2019/12/12 全球购物
《陋室铭》教学反思
2014/02/26 职场文书
校园文化艺术节开幕词
2016/03/04 职场文书
写好求职信的技巧解密
2019/05/14 职场文书