会员保存后处理扩展
通过 Filter_Plugin_PostMember_Succeed 接口,可以在 Z-BlogPHP 会员资料保存成功之后执行自定义逻辑。该接口在 PostMember() 函数的末尾触发,此时会员数据已写入数据库、作者模块也已重建,适合做审计日志、外部用户系统同步等后续处理。
接口信息
| 接口 | 参数 | 说明 |
|---|---|---|
Filter_Plugin_PostMember_Succeed | &$mem | 会员编辑成功的接口 |
完整案例
下例在会员资料保存成功后记录审计日志,涵盖会员 ID、名称、级别与操作人,便于后台安全审计:
php
<?php
RegisterPlugin("demoAPP", "ActivePlugin_demoAPP");
function ActivePlugin_demoAPP()
{
Add_Filter_Plugin('Filter_Plugin_PostMember_Succeed', 'demoAPP_PostMember_Succeed');
}
function demoAPP_PostMember_Succeed(&$mem)
{
global $zbp;
// 保存成功后写审计日志
$file = $zbp->usersdir . 'plugin/demoAPP/member.log';
$log = date('Y-m-d H:i:s') . ' 会员保存 #' . $mem->ID
. ' 名称=' . $mem->Name . ' 级别=' . $mem->Level
. ' 操作人=' . $zbp->user->Name . PHP_EOL;
file_put_contents($file, $log, FILE_APPEND);
}注意事项
- 触发位置:在
PostMember()末尾、$mem->Save()、会员计数(非大数据模式)与authors模块重建完成之后; - 此时
$mem->ID已可用:新建会员在此前 ID 为 0,进入本接口时已拿到数据库分配的 ID,可据此区分注册与资料更新两类场景; - 回调中的对象参数可以声明为
&$mem引用,但此阶段修改对象属性不会再自动入库,确需落库应在回调内显式调用$mem->Save(); - 本接口与
Filter_Plugin_PostMember_Core是同一保存流程的前后两段:Core 在保存前触发、可改数据,Succeed 在保存后触发; - 会员
Password在入库前已加密,本接口拿到的Password属性是加密结果而非明文,做外部同步时不要把它当明文密码使用;删除会员请使用Filter_Plugin_DelMember_Succeed。