挂载点与钩子
概述
相关文件
运行原理
1.
2.
3.
4.
系统对钩子加载的处理:
对应钩子数据库表前缀_hooks表存储示例如下:
说明:上图列出了2个挂载点,分别对应部门向上同步和用户向上同步的两个挂载点。这两个挂载点下分别挂载了两个钩子程序(1. 钉钉的用户同步;2. 企业微信的用户同步)。addons为钩子程序对应类库文件路径。name即为标签位(挂载点)。
调用
Hook::listen('syntoline_user', $param);
将执行该挂载点下的两个程序,即钉钉应用的用户同步和企业微信应用的用户同步。定义(添加)
dzz/dingtalk/classes/dingtalk.php。
应用的钩子程序配置在对应应用目录下的dzz_app_应用名.xml文件中配置(如dzz/dingtalk/dzz_app_dingtalk.xml),格式如下:
xml书写规范:
1.
2.
item
,id
对 应标签位(挂载点);3.
priority
对应优先级(可忽略),若有与系统默认钩子同名或同一钩子需执行多个处理程序,可定义优先级以保证执行顺序,优先级以数值大小来区分,数值越大优先级越高;4.
description
对应描述(可忽略);5.
cdata
对应钩子程序路径,如需定义钩子执行作用域,可在路径添加 “|作用域(命名空间方式指定,中间分割符用/)”,如上定义标签位 test,在 test 应用下运行时(即用 Hook::listen('test')
调用),将先执行 dzz\test\classes\test 对应处理程序,后执行 dzz\test\classes\testa
对应处理程序。若非 test 应用下,将只执行 dzz\test\classes\test
。钩子类文件:
run
方法(即钩子方法需与标签位名称一致或用 run
来命名)。系统默认钩子,均使用命名空间定义,根据需要可不用亦可。
在钩子方法中,一旦执行
return false;
,则该标签位(挂载点)下无论是否还有其它钩子程序,都将不再执行。应用导入或安装时将根据应用文件 xml 中的 item 里的 hooks 模块配置。安装后更新系统缓存以验证钩子程序是否正确调用。
修改于 2025-03-14 09:16:31