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将mysql数据库整库导出生成sql文件的具体实现
Jan 08 PHP
使用PHP破解防盗链图片的一个简单方法
Jun 07 PHP
解密ThinkPHP3.1.2版本之独立分组功能应用
Jun 19 PHP
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
Nov 08 PHP
利用“多说”制作留言板、评论系统
Jul 14 PHP
PHP之浮点数计算比较以及取整数不准确的解决办法
Jul 29 PHP
非常全面的php日期时间运算汇总
Nov 04 PHP
CodeIgniter多语言实现方法详解
Jan 20 PHP
php文件上传的两种实现方法
Apr 04 PHP
thinkPHP5.0框架环境变量配置方法
Mar 17 PHP
PHP简单读取xml文件的方法示例
Apr 20 PHP
php实现生成带二维码图片并强制下载功能
Feb 24 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
用mysql_fetch_array()获取当前行数据的方法详解
2013/06/05 PHP
使用PHP会话(Session)实现用户登陆功能
2013/06/29 PHP
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
2014/05/10 PHP
php中创建和调用webservice接口示例
2014/07/25 PHP
PHP如何将log信息写入服务器中的log文件
2015/07/29 PHP
JavaScript实现广告的关闭与显示效果实例
2015/07/02 Javascript
js实现根据身份证号自动生成出生日期
2015/12/15 Javascript
jQuery Easyui快速入门教程
2016/08/21 Javascript
HTML中setCapture、releaseCapture 使用方法浅析
2016/09/25 Javascript
JS 拦截全局ajax请求实例解析
2016/11/29 Javascript
基于JavaScript实现窗口拖动效果
2017/01/18 Javascript
jQuery实现复选框的全选和反选
2017/02/02 Javascript
老生常谈jquery中detach()和remove()的区别
2017/03/02 Javascript
angular2 ng build部署后base文件路径问题详细解答
2017/07/15 Javascript
javascript 中select框触发事件过程的分析
2017/08/01 Javascript
Nodejs中怎么实现函数的串行执行
2019/03/02 NodeJs
ES6入门教程之Array.from()方法
2019/03/23 Javascript
关于element-ui的隐藏组件el-scrollbar的使用
2019/05/29 Javascript
wxpython中利用线程防止假死的实现方法
2014/08/11 Python
Python Web框架Flask中使用新浪SAE云存储实例
2015/02/08 Python
Python argv用法详解
2016/01/08 Python
Python实现二分查找与bisect模块详解
2017/01/13 Python
读取本地json文件,解析json(实例讲解)
2017/12/06 Python
利用python实现在微信群刷屏的方法
2019/02/21 Python
python判断文件夹内是否存在指定后缀文件的实例
2019/06/10 Python
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
2019/06/27 Python
Python封装成可带参数的EXE安装包实例
2019/08/24 Python
opencv3/python 鼠标响应操作详解
2019/12/11 Python
Pycharm2020.1安装中文语言插件的详细教程(不需要汉化)
2020/08/07 Python
如何判断计算机可能已经中马
2013/03/22 面试题
物业经理求职自我评价
2013/09/22 职场文书
出纳工作岗位责任制
2014/02/02 职场文书
小班秋游活动方案
2014/02/22 职场文书
学生自我评语大全
2014/04/18 职场文书
观看《信仰》心得体会
2016/01/15 职场文书
redis sentinel监控高可用集群实现的配置步骤
2022/04/01 Redis