系统核心设计提供了一些可能会需要的钩子(位置),尽可能的方便应用的扩展而不必改动框架核心,如:app_init、app_begin等
添加新的钩子的方式有两种:
1.在application/tags.php中新增一行,如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200405170335765.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2d1b19saW5kYQ==,size_16,color_FFFFFF,t_70)
2.在代码中调用hook的add方法
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200405170507296.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2d1b19saW5kYQ==,size_16,color_FFFFFF,t_70)
该方式支持闭包![在这里插入图片描述](https://img-blog.csdnimg.cn/20200405171339383.png)
行为的定义方法
application/behavior文件夹下定义相应类;类中的方法名和钩子的名称一致,如果该方法名不存在,会去调用默认的钩子方法名
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200405170751316.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2d1b19saW5kYQ==,size_16,color_FFFFFF,t_70)
触发行为
\Hook::listen(“test”,[‘a’=>‘b’,‘c’=>‘d’]);
也可以不通过定义钩子,直接调用行为
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200405171649193.png)