分类目录归档:thinkphp

浅析onethink的钩子与插件

tp3.2源码第一次出想是在 /onethink/ThinkPHP/Library/Think/Think.class.php 第76行

$mode[‘tags’]是什么东西?

$mode为当前模式的配置。读取自/onethink/ThinkPHP/Mode/common.php

可以看出 $mode[‘tags’] 中定义了不同标签时候需要执行的行为。

Hook::import();是什么呢?

Hook类路径  /onethink/ThinkPHP/Library/Think/Hook.class.php

是ThinkPHP系统钩子实现的一个类。

import用来干嘛呢?

用来批量导入插件。

在加载应用行为定义时,onethink导入了

即在应用初始化(app_init标签)是需要执行InitHook这个行为。

那么什么时候开始执行这些标签呢?

文件/onethink/ThinkPHP/Library/Think/App.class.php 中

第一行,执行了Hook::listen( ‘app_init’ );,而Hook::linten()又去调用了,Hook::exec()方法去执行行为。

来看下Common\Behavior\InitHook在干什么?

1、从缓存中读取钩子列表。

2、判断是否存在缓存,如有则批量导入。

3、如没有,查数据库onethink_hooks表,获取钩子列表然后缓存。