Thinkphp实战利用钩子使用行为扩展|Thinkphp实战利用钩子使用行为扩展 (Hook)
上午研究了几篇关于使用Hook实现钩子的实例或详细描述,总结了一些,所以打算写两个实例深入记忆。
注意事项:
注意事项:实例1 1.在控制器中 Application->Home->Controller->IndexController.class.php 添加如下代码:
1.触发行为的关键方法是Hook类中的listen方法,它通过遍历某个行为标签下的所有行为,依次实例化并调用run方法
2.listen方法中,如果之前在配置文件中开启了DEBUG模式,则它会生成日志记录你的行为,这里面牵涉到3.很多的IO操作,所以你的项目完成时建议取消DEBUG模式以提升速度
3.listen方法中,允许传递参数且只允许传递一个参数(传多个可以用数组呢),不过这个参数是引用传值,所以只能传入变量,传入常量会报错
4.最后,Library\Think\Behavior.class.php,这个抽象类中只有一个抽象方法run(),在你的自己行为扩展中建议继承它,尽管这不是必须的,但是这样更加规范
namespace Home\Controller;
use Think\Controller;
use Think\Hook;
//引用Hook
class IndexController extends Controller {
public function index(){
Hook::add('ad','Behavior\\adBehavior');
//手动注册行为 ad 是注册行为的名称 后面的是路径 接下来会说如何新建路径中的文件
hook::listen('ad',$parnam);
//触发行为 (这种是在控制器中触发行为,还有在html页面中触发行为的 接下来就会看到) $parnam 为想要带的参数 可以随便定义html中触发的话请注释这句
$this->display();
}
}
2.来新建一个行为取名叫ad(广告),ThinkPHP->Library->Behavior->adBehavior.class.php
在里面写入代码:
namespace Behavior;
class adBehavior{
function run($arg){
//$arg为带过来的参数 可以在其中写入自己的业务逻辑 行为必须执行run
echo '我是一条'.$arg['name'].'广告,'.$arg['value'].'代言';
//在此介绍下,run必须的 ,细心的会在Think核心找到Behavior.class.php里面有这样一句操蛋的话abstract public function run(&$params);
你懂的
}
}
3.在模板中使用 Application->Home->View->Index->index.html 添加如下代码:
- 锐客网
How to used?
{:hook('ad', array('name'=>'AV','value'=>'*老师'))} //这个呢就是在页面中触发行为的方式了
【Thinkphp实战利用钩子使用行为扩展|Thinkphp实战利用钩子使用行为扩展 (Hook)】4.还需要一步 如果我们想在模板上调用例如{:tag('example',array('name'=>'name','value'=>'value'))} 这样的方法,首先我们到 ThinkPHP->Common->functions.php,你会搜到 tag 这个方法,复制下 tag 方法,修改为
function hook($hook,$params=array()){
\Think\Hook::listen($hook,$params);
//监听一个钩子
}
实例1结束
实例2 实例一已经够详细了实例二是根据 http://www.jianshu.com/p/7fa08fceea5b 修改的 比较简洁 自动注册就不在列举
使用钩子触发行为扩展的流程:
1.自动注册(Common/Conf/tags.php按格式自己添加),或者 手动注册(类中方法如初始方法,调用Hook::add(tags,name));例子:
2.写好自己的行为类,类名以Behavior结尾,实现run方法
3.在需要添加行为的函数里 ,直接Hook::Listen(tags,prarm),注意一定要传变量,不需要传常量。
Home\IndexController; 中代码:
public function index()
{//这里我是手动注册的行为
Hook::add('ads','Home\Behaviors\adsBehavior');
//ads 为行为名称 后面的是路径
hook::listen('ads',$param);
//这个是监听触发行为 $param为传递的参数 可自定义
}
}
新建 Home\Behaviors\adsBehavior.php
写入代码:
OK,完成,刚刚超过下班2分钟。愉快下班。
推荐阅读
- thinkphp|thinkphp 3.2 如何调用第三方类库
- 《机器学习实战》高清中文版PDF英文版PDF+源代码下载
- --木木--|--木木-- 第二课作业#翼丰会(每日一淘6+1实战裂变被动引流# 6+1模式)
- Spring|Spring Boot 自动配置的原理、核心注解以及利用自动配置实现了自定义 Starter 组件
- 2020-07-29《吴军·阅读与写作50讲》24实战才能转化效能
- 【万伽复利】什么是复利(如何利用复利赚钱?)
- PHP开发-Mac搭建ThinkPHP5.0
- Python实战计划学习笔记(9)为大规模爬取准备
- 韵达基于云原生的业务中台建设 | 实战派
- 【V课会】第3季-30天小学思维导图实战营