Files
YwxAppThink/app/member/controller/Register.php
T
ywxapp 1d49e6f5ee feat: 公共表更名 common/member 前缀 + 插件命令自动加载 + 版本 1.1.1
- 18 张公共表更名(addon/attachment/configure/links/spider_log/spider_stat/sms/notice/ad/task/prop/medal/help/card -> common_*,member_wallets->member_wallet,score_rule/score_log -> member_*,addon_config->common_addonconf),模型全部对齐新表名,Db 直引用清零
- Attachment 模型补  表名绑定,修复富文本上传查 wxapp_attachment 1146 隐患
- install.sql + 迁移 SQL:backend_admin/backend_role delete_at 默认 0,修复软删除(NULL != 0)误过滤导致后台菜单为空
- AppService::boot() 支持插件 info.php 声明 commands 自动注册插件命令(psr-4 自动加载,坏类名自动跳过)
- 各插件(haonav/mqttbroker/wxchat/articles/blog/forum 等)字段与配置同步调整
- 框架版本 1.1.0 -> 1.1.1
2026-08-20 20:19:15 +08:00

141 lines
4.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
// +----------------------------------------------------------------------
// | YwxApp [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2026-2036 http://ywxapp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: ywxapp<admin@ywxapp.cn>
// +----------------------------------------------------------------------
declare (strict_types = 1);
namespace app\member\controller;
use app\member\validate\Register as RegisterValidate;
use think\exception\ValidateException;
use think\facade\Env;
use think\facade\Event;
use think\Request;
use ywxapp\controller\MemberBase;
use ywxapp\library\Sms;
use ywxapp\model\CommonSms as SmsModel;
use ywxapp\model\MemberUser as UserModel;
use ywxapp\model\MemberProfile;
use ywxapp\model\MemberGroupAccess;
/**
* Register 类
*
* @author ywxapp <admin@ywxapp.cn>
*/
class Register extends MemberBase
{
/**
* 无需登录即可访问注册相关接口
* @var array
*/
protected $noNeedLogin = ['*'];
/**
* @var array
*/
protected $noNeedVerify = ['*'];
protected function initialize()
{}
/**
* 注册页
*/
public function index()
{
$this->view->layout(false);
return $this->view->fetch();
}
/**
* 发送注册短信验证码
* 事件驱动:SmsSend 由短信插件实际下发;开发环境默认监听空发并回传验证码。
*/
public function sendsms()
{
if (!($this->request->isAjax() && $this->request->isPost())) {
$this->result->error('访问错误');
}
$cellphone = (string)$this->request->param('cellphone', '');
if (!preg_match('/^1[3-9]\d{9}$/', $cellphone)) {
$this->result->error('手机号格式不正确', 1);
}
if (UserModel::where('mobile', $cellphone)->whereOr('account', $cellphone)->find()) {
$this->result->error('该手机号已注册', 1);
}
if (!Sms::send($cellphone, null, 'register')) {
$this->result->error('验证码发送失败', 1);
}
// 开发模式把验证码回传前端便于测试
if (Env::get('app_debug')) {
$code = SmsModel::where(['mobile' => $cellphone, 'event' => 'register'])
->order('id', 'DESC')->value('code');
$this->result->success(['debug_code' => $code]);
}
$this->result->success();
}
/**
* 注册提交
* 流程:校验表单 → 校验短信验证码 → 创建用户(模型自动加盐哈希密码)
* → 写入资料/用户组 → 触发 UserRegister / MemberLog 事件(插件钩子点)
*/
public function save(Request $request)
{
if (!($this->request->isAjax() && $this->request->isPost())) {
$this->result->error('访问错误');
}
$data = $this->request->param();
try {
validate(RegisterValidate::class)->check($data);
} catch (ValidateException $e) {
$this->result->error($e->getMessage(), 1);
}
// 校验短信验证码(Sms::check 比对数据库,无需监听)
if (!Sms::check($data['cellphone'], $data['vercode'], 'register')) {
$this->result->error('验证码错误或已过期', 1);
}
if (UserModel::where('mobile', $data['cellphone'])->whereOr('account', $data['cellphone'])->find()) {
$this->result->error('该手机号已注册', 1);
}
$user = UserModel::create([
'account' => $data['cellphone'],
'mobile' => $data['cellphone'],
'nickname' => $data['nickname'],
'email' => $data['cellphone'] . '@mobile.local', // 手机号注册无邮箱,写入唯一占位避免唯一键冲突
'password' => $data['password'], // 触发模型 setPasswordAttr 自动加盐哈希
'status' => 1,
'gid' => 2, // 普通会员组(wxapp_user_group.id=2)
'create_ip' => $this->request->ip(),
'update_ip' => $this->request->ip(),
]);
// 建立用户资料行与默认用户组
MemberProfile::create(['uid' => $user->uid]);
MemberGroupAccess::create(['uid' => $user->uid, 'gid' => 2]);
// ===== 插件事件触发点 =====
// UserRegister:业务扩展钩子,插件可在此发欢迎信、初始化钱包、分配角色等
Event::trigger('UserRegister', ['member' => $user, 'data' => $data]);
// MemberLog:审计钩子(可监听写入 wxapp_user_log)
Event::trigger('MemberLog', [
'uid' => $user->uid,
'action' => 'register',
'ip' => $this->request->ip(),
'remark' => '用户注册',
]);
Sms::flush($data['cellphone'], 'register');
$this->result->success();
}
}