codecamp

add_hook()

作用:添加 Api Hook 回调函数。 语法 null add_hook(mixed $api, callable $callback[, boolean $apiIsSet])

参数

  • $api 设置 API 名称,使用点语法,如 user.add,也可以设置为一个索引数组同时为多个 API 添加同一个回调函数。
  • $callback 回调函数,可以是一个函数名,也可以是一个匿名函数。
  • $apiIsSet 该 API 是否为一个集合,默认为 true,即同一个 API 中存储多个回调函数(数组),如果设置为 false,则该 API 仅存储 $callback 一个回调函数

别名add_action()

说明$callback 回掉函数支持最多一个参数,这个参数同时也是 do_hooks() 函数的第二个参数,在函数中可以对这个参数就行判断,修改等,最后将其返回或不反回(返回 null),甚至返回其他内容(但要求类型和这个参数相同)。

如果返回值既不是 null 也不是return error() ,则返回值会应用到 do_hooks() 函数的第二个参数上,来实现更改请求参数。

如果设置了 $apiIsSet 参数为 false,那么 return error() 也会被应用到 do_hooks() 函数的第二个参数上。

在回调函数中,可以通过判断请求参数,来决定接下来的行为,比如当请求参数不存在或者不匹配时,可以使用return error() 来返回错误信息。

影响模块操作中的回调函数,其参数永远是提交的参数构成的数组或者获取模块记录而返回的数组,参见《挂钩概述》。

示例

<?php
add_hook('user.add', function($user){
    $user['user_avatar'] = template_url('avatar.png'); //为用户设置一个默认头像
    return $user; //将 $user 返回,必需,不返回不会应用修改
});
/** 或者为 Api 设置一个名字 */
add_action('user.add.auto_avatar', function($user){
    /** 代码 */
}, false); //此时需要将第三个参数设置为 fasle
/** 或者使用一个函数名做为回调函数 */
add_action('user.add', 'auto_avatar'); //此时不能将第三个参数设置为 false,因为 user.add 是一个系统预定的集合
function auto_avatar($user){
    /** 代码 */
}
/** 使用 return error() 返回错误 */
add_action('user.update.check_login', function(){
    if(!is_login()) return error('用户未登录,不允许操作。');
}, false);
hooks()
remove_hook()
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

挂钩机制

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }