# 行为和钩子 1.系统定义钩子顺序 | 钩子| 描述 |参数 | | --- | --- | --- | | app_init | 应用初始化标签位 | 无 | | app_begin | 应用开始标签位 | 当前调度信息 | | module_init | 模块初始化标签位 | 当前请求对象实例 | | action_begin | 控制器开始标签位 | 当前的callback参数 | | view_filter | 视图输出过滤标签位 | 当前模板渲染输出内容 | | app_end | 应用结束标签位 | 当前响应对象实例 | | response_end | 输出结束标签位(V5.0.1+) | 当前响应对象实例 | | log_write | 日志write方法标签位 | 当前写入的日志信息 | ### 1.如何监听 ~~~ Hook::listen('钩子名称','参数(引用)','额外参数','是否一次有效返回值'); ~~~ ### 2.监听系统钩子 ~~~ Hook::listen('module_init', $request); ~~~ ### 3.demo 3.1定义行为 ~~~ namespace app\demo\behavior; class Hello { public function run(){ echo "hello world"."<br/>"; } } ~~~ 3.2配置tags指向行为 ~~~ return [ 'app_init'=>[ 'app\demo\behavior\Hello', ], ]; ~~~ 3.3新建控制器 ~~~ namespace app\demo\controller; class Index extends Base { public function index(){ echo "this is index!"; } } ~~~ 输出 hello world; this is index! ### 4.demo2 4.1修改行为 3.1 改成 ~~~ namespace app\demo\behavior; class Hello { public function run(){ echo "hello world"."<br/>"; } public function appInit(){ echo "this is app_init"; } } ~~~ 输出 this is app_init; this is index! ### 5.动态配置 ~~~ Hook::add('钩子名称','行为定义','是否优先执行'); ~~~ ~~~ use think\Hook; Hook::add('app_init',[ '\app\demo\behavior\Hello', ]); ~~~ ### 6.自定义钩子 ~~~ $result = Hook::listen('controller_init', $this, $request, true); ~~~