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 相关文章推荐
人大复印资料处理程序_查询篇
Oct 09 PHP
收藏的一个php小偷的核心程序
Apr 09 PHP
php 广告调用类代码(支持Flash调用)
Aug 11 PHP
Zend Framework中的简单工厂模式 图文
Jul 10 PHP
ubuntu10.04配置 nginx+php-fpm模式的详解
Jun 03 PHP
php实现俄罗斯乘法实例
Mar 07 PHP
phalcon框架使用指南
Feb 23 PHP
thinkPHP模板算术运算相关函数用法分析
Jul 12 PHP
Yii全局函数用法示例
Jan 22 PHP
php批量删除操作代码分享
Feb 26 PHP
解决Yii2邮件发送结果返回成功,但接收不到邮件的问题
May 23 PHP
浅谈PHP无限极分类原理
Mar 14 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文件目录基础操作
2014/11/11 PHP
PHP中调用SVN命令更新网站方法
2015/01/07 PHP
基于php实现的php代码加密解密类完整实例
2016/10/12 PHP
popdiv
2006/07/14 Javascript
ASP.NET jQuery 实例3 (在TextBox里面阻止复制、剪切和粘贴事件)
2012/01/13 Javascript
页面js遇到乱码问题的解决方法是和无法转码的情况
2014/04/30 Javascript
Node.js 制作实时多人游戏框架
2015/01/08 Javascript
jQuery获取样式中颜色值的方法
2015/01/29 Javascript
jQuery弹出层插件Lightbox_me使用指南
2015/04/21 Javascript
JS使用正则表达式除去字符串中重复字符的方法
2015/11/05 Javascript
javascript中checkbox使用方法实例演示
2015/11/19 Javascript
Function.prototype.apply()与Function.prototype.call()小结
2016/04/27 Javascript
JavaScript正则表达式实例详解
2016/10/16 Javascript
Vue.js学习之过滤器详解
2017/01/22 Javascript
JS基于面向对象实现的多个倒计时器功能示例
2017/02/28 Javascript
node中使用es5/6以及支持性与性能对比
2017/08/11 Javascript
ztree加载完成后显示勾选节点的实现代码
2018/10/22 Javascript
js中的深浅拷贝问题简析
2019/05/10 Javascript
详解在React-Native中持久化redux数据
2019/05/22 Javascript
基于layui框架响应式布局的一些使用详解
2019/09/16 Javascript
详解利用nodejs对本地json文件进行增删改查
2019/09/20 NodeJs
vue项目中使用particles实现粒子背景效果及遇到的坑(按钮没有点击响应)
2020/02/11 Javascript
如何使用 vue-cli 创建模板项目
2020/11/19 Vue.js
[39:19]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第二场 11.26
2020/11/30 DOTA
Python中变量交换的例子
2014/08/25 Python
python实现的二叉树定义与遍历算法实例
2017/06/30 Python
Python实现图片转字符画的示例
2017/08/22 Python
python机器学习案例教程——K最近邻算法的实现
2017/12/28 Python
python中的global关键字的使用方法
2019/08/20 Python
Python编程快速上手——选择性拷贝操作案例分析
2020/02/28 Python
编写python代码实现简单抽奖器
2020/10/20 Python
一篇文章带你搞定Ubuntu中打开Pycharm总是卡顿崩溃
2020/11/02 Python
全球领先的美容用品专卖店:Beauty Plus Salon
2018/09/04 全球购物
Watchshop德国:欧洲在线手表No.1
2019/06/20 全球购物
生日主持词
2014/03/20 职场文书
优秀班主任先进事迹材料
2014/12/16 职场文书