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)二
Oct 09 PHP
php中计算时间差的几种方法
Dec 31 PHP
PHP对字符串的递增运算分析
Aug 08 PHP
php判断手机访问还是电脑访问示例分享
Jan 20 PHP
PHP获取windows登录用户名的方法
Jun 24 PHP
PHP生成短网址的3种方法代码实例
Jul 08 PHP
PHP反射机制用法实例
Aug 28 PHP
PHP邮箱验证示例教程
Jun 01 PHP
PHP数据库操作二:memcache用法分析
Aug 16 PHP
PHP实现的服务器一致性hash分布算法示例
Aug 09 PHP
Laravel框架实现的rbac权限管理操作示例
Jan 16 PHP
thinkphp框架类库扩展操作示例
Nov 26 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
安装APACHE
2007/01/15 PHP
php 在文件指定行插入数据的代码
2010/05/08 PHP
typecho插件编写教程(三):保存配置
2015/05/28 PHP
jQuery 创建Dom元素
2010/05/07 Javascript
firefox下input type="file"的size是多大
2011/10/24 Javascript
javascript下拉列表菜单的实现方法
2015/11/18 Javascript
JavaScript设计模式经典之命令模式
2016/02/24 Javascript
更靠谱的H5横竖屏检测方法(js代码)
2016/09/13 Javascript
bootstrap提示标签、提示框实现代码
2016/12/28 Javascript
详解vue-validator(vue验证器)
2017/01/16 Javascript
ES6中Symbol类型用法实例详解
2017/04/06 Javascript
Mint UI组件库CheckList使用及踩坑总结
2018/12/20 Javascript
node.js使用mongoose操作数据库实现购物车的增、删、改、查功能示例
2019/12/23 Javascript
JS如何实现网站中PC端和手机端自动识别并跳转对应的代码
2020/01/08 Javascript
node.js中fs文件系统模块的使用方法实例详解
2020/02/13 Javascript
Vue实现简单计算器案例
2020/02/25 Javascript
js基于canvas实现时钟组件
2021/02/07 Javascript
pymongo实现控制mongodb中数字字段做加法的方法
2015/03/26 Python
关于python列表增加元素的三种操作方法
2018/08/22 Python
Django处理Ajax发送的Get请求代码详解
2019/07/29 Python
pytorch实现保证每次运行使用的随机数都相同
2020/02/20 Python
通过实例解析Python return运行原理
2020/03/04 Python
pyecharts动态轨迹图的实现示例
2020/04/17 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
2020/06/04 Python
在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程
2020/08/07 Python
css3中检验表单的required,focus,valid和invalid样式
2014/02/21 HTML / CSS
分享一个H5原生form表单的checkbox特效代码
2018/02/26 HTML / CSS
HTML5实现的震撼3D焦点图动画的示例代码
2019/09/26 HTML / CSS
SIMON MILLER官网:洛杉矶的生活方式品牌
2020/10/19 全球购物
《钱学森》听课反思
2014/03/01 职场文书
就业协议书怎么填
2014/04/11 职场文书
什么是就业协议书
2014/04/17 职场文书
房地产开发项目建议书
2014/05/16 职场文书
优秀员工推荐材料
2014/12/20 职场文书
企业计划生育责任书
2015/05/09 职场文书
CSS 文字装饰 text-decoration & text-emphasis 详解
2021/04/06 HTML / CSS