[TOC]
### 组件说明
> hook组件其实就是一个全局的钩子,可以在相应的地方绑定、触发事件。
### 配置选项
| 配置名 | 参数类型 | 可选 | 默认值 | 说明 |
| --- | --- | --- | --- | --- |
| class | string | 是 | lying\service\Hook | 不可更改 |
| events | array | 是 | [] | |
### 示例配置
~~~php
'hook' => [
'class' => 'lying\service\Hook', //完整类名,可以不写,因为是核心组件
'events' => [
['frameworkError', function ($event) {}],
['frameworkBegin', function () {}],
['frameworkEnd', ['Timer', 'tick']],
],
],
~~~
> 这边的配置,其实就是在框架加载之前把相应的事件名和回调绑定到hook组件上,但是也因为如此,预先绑定的回调无法使用自动加载和未定义的参数以及变量。
配置的格式,events为一个数组,里面包含N个`[事件名称, callback, 默认事件参数]`形式的的数组,其中默认事件参数不是必须的。
### 调用方式
~~~php
\Lying::$maker->hook();
\Lying::$maker->hook;
\Lying::$maker->get('hook');
~~~
### 在其他地方绑定事件
事件除了在配置文件预先定义和绑定之外,还可以再程序运行中进行绑定:
~~~php
\Lying::$maker->hook->on('frameworkEnd', function ($event) {
var_dump($event->sender);
});
~~~
### 移除事件
~~~php
$call = function ($event) {};
//卸载指定事件
\Lying::$maker->hook->off('frameworkEnd', $call);
//卸载所有事件
\Lying::$maker->hook->off('frameworkEnd');
~~~
### 触发事件
~~~php
\Lying::$maker->hook->trigger('frameworkEnd', new Event());
~~~
* 事件按顺序触发,如果某一个事件返回了false,或者事件的参数$event->stop设置为true,则后面的事件都不会再触发。
### 其他事件
请参考[事件章节](event.md)
- 序言
- 更新日志
- 安装
- 规范
- 常量
- 配置
- 自动加载
- MVC
- 模块
- 控制器
- 模型
- 视图
- php原生模板
- 模板引擎
- 变量输出
- 模板注释
- 模板继承
- 模板引用
- 流程控制
- 原样输出
- 服务组件
- Hook组件
- Request组件
- Router组件
- Cookie组件
- Encrypter组件
- Dispatch组件
- Response组件
- View组件
- Session组件
- Helper组件
- 数据分页
- 数据验证
- Logger组件
- Cache组件
- Redis组件
- Connection组件
- 执行sql语句
- 查询生成器
- 查询方法详解
- Schema
- Captcha组件
- CLI
- CLI工具
- 事件
- 类事件
- 实例事件
- 全局事件
- 助手函数
- 扩展
- 异常
- 部署
- Apache
- Nginx
- IIS
- 虚拟主机