Hook插件使用说明:
- 框架的扩展性非常重要,InitPHP提供了非常简单的工具类、扩展类等扩展方式。项目的扩展也是非常重要的,InitPHP框架提供Hook机制(插件或者钩子)来实现项目扩展
- 看过Wordpress的朋友应该都知道Wordpress的插件机制做得非常好,所以Wordpress这款开源软件吸引了无数的开发者为它开发插件
- InitPHP框架的Hook原理:在项目代码中,你认为要扩展(暂时不扩展)的地方放置一个钩子函数,等需要扩展的时候,把需要实现的类和函数挂载到这个钩子上,就可以实现扩展了
- 一个钩子可以挂载多个实现
InitPHP框架的Hook机制配置文件:
/**
* 插件Hook配置
* 1. 如果你需要使用InitPHP::hook() 钩子函数来实现插件功能
* 2. 详细查看钩子的使用方法
*/
$InitPHP_conf['hook']['path'] = 'library/hook'; //插件文件夹目录, 不需要加'/'
$InitPHP_conf['hook']['class_postfix'] = 'Hook'; //默认插件类名后缀
$InitPHP_conf['hook']['file_postfix'] = '.hook.php'; //默认插件文件名称
$InitPHP_conf['hook']['config'] = 'hook.conf.php'; //配置文件
钩子函数使用InitPHP::hook('钩子名称', '传递的参数'):
- 在PHP和HTML模板中都可以放置你的钩子函数,例如:InitPHP::hook('guest', 'Hook')
class indexController extends Controller {
public $initphp_list = array('test');
public function run() {
InitPHP::hook('guest', 'Hook'); //放置一个guest名称的钩子,传递的参数为Hook
$this->view->set_tpl('test'); //设置一个test.htm的模板页面
$this->view->display(); //模板显示
}
/**
* @return testService
*/
private function getTestService() {
return InitPHP::getService('test','test');
}
}
Hook自身的钩子挂载配置文件hook.conf.php:
- 通过过这个配置文件,可以知道一个钩子上挂载了多少个实现,需要实现那些类中的函数
- 下面的例子中:一个guest的钩子上,挂载了test类中的run函数和test类中的aa函数
/*
* 钩子名称 => array(array('挂钩上对应的类名称', '函数名称')) 一个挂钩多个函数
* 钩子名称 => array(挂钩上对应的类名称,函数名称) //一个挂钩一个钩子函数
*/
return array(
//guest挂钩,InitPHP::hook('guest','Hook'); 在程序中放置钩子,guest钩子名称,Hook传递的参数
'guest' => array(
array('test', 'run'),
array('test', 'aa')
)
);
具体函数test.hook.php:
- 每个函数都需要传递一个$data的参数,这个参数是外部传递进来的
//一个测试的钩子
class testHook {
public function run($data) {
echo '第一个简单的' . $data;
}
public function aa($data) {
echo '
第二个简单的' . $data;
}
}