在 cms 系统中遇到过这种情况:
其它模块的数据需要关联会员模块的会员数据,所以在删除会员时应需要与会员数据关联的模块进行数据关联操作。
比如删除一个会员时同时删除此会员发布的文章。
但是,其它模块是在会员模块之后才开发出来的,要实现这种关联性,可以每多一个与会员模块关联的模块就改动一次会员模块的代码,又或者,使用 hook(钩子)的概念。
通过制定一套全系统模块统一的 hook 规则,令数据关联问题通过 hook 灵活地解决。
值得注意,这套 hook 规则首要解决的是模块间的数据关联问题,其次才考虑实现模块“插件”那种 hook 。
下面以“删除一个会员数据应先删除其相关数据”为例子说明这套 hook 规则:
在模块目录使用 hook 目录保存与 hook 系统相关的所有代码。
/member/hook/ 是会员模块 hook 目录。
/comment/hook/ 是评论模块 hook 目录。
在这个例子中, hook 是由会员模块提供的,如“删除一个会员”hook。其它模块挂载到会员模块的 hook 中。
提供及挂载 hook 的代码使用类的形式定义,钩子使用 hook 这个单词,挂载的代码使用 callback 这个单词。
在 hook 目录内使用一个名为 mod 的文本文件记录挂载到此模块的模块列表,一行一个:
file:/member/hook/mod
comment
提供 hook 的类使用 h_ 前序(h表示hook),文件名规则为 h_{hook_name}.class.php ,对应的类名为 h_{mod_name}_{hook_name} 。
其它模块的数据需要关联会员模块的会员数据,所以在删除会员时应需要与会员数据关联的模块进行数据关联操作。
比如删除一个会员时同时删除此会员发布的文章。
但是,其它模块是在会员模块之后才开发出来的,要实现这种关联性,可以每多一个与会员模块关联的模块就改动一次会员模块的代码,又或者,使用 hook(钩子)的概念。
通过制定一套全系统模块统一的 hook 规则,令数据关联问题通过 hook 灵活地解决。
值得注意,这套 hook 规则首要解决的是模块间的数据关联问题,其次才考虑实现模块“插件”那种 hook 。
下面以“删除一个会员数据应先删除其相关数据”为例子说明这套 hook 规则:
在模块目录使用 hook 目录保存与 hook 系统相关的所有代码。
/member/hook/ 是会员模块 hook 目录。
/comment/hook/ 是评论模块 hook 目录。
在这个例子中, hook 是由会员模块提供的,如“删除一个会员”hook。其它模块挂载到会员模块的 hook 中。
提供及挂载 hook 的代码使用类的形式定义,钩子使用 hook 这个单词,挂载的代码使用 callback 这个单词。
在 hook 目录内使用一个名为 mod 的文本文件记录挂载到此模块的模块列表,一行一个:
file:/member/hook/mod
comment
提供 hook 的类使用 h_ 前序(h表示hook),文件名规则为 h_{hook_name}.class.php ,对应的类名为 h_{mod_name}_{hook_name} 。