处理提交更新用户帐户的请求,会使用 ProfileController 里的 update 方法来处理 .. 找到这个方法 .. 在方法里面我们需要用到 request .. response .. auth .. 还有 session ..
先定义一些验证规则 .. 添加一个 rules ... 里面添加一个 username ... 规则是 required .. 还需要 unique ,就是它的值必须是唯一的 .. 是在 users 表里面 .. 字段是 username .. 还得做一个排除 .. id .. 对应的值是 auth.user.id ...
不做这个排除的话,更新的时候如果不修改用户名,直接更新,也会出现 unique 验证失败的错误 .. 复制一份 .. 再添加一个 email .. 它的规则是 required .. email 。还需要 unique ..
再复制一份 .. 添加一个 github .. 它的规则需要一个 unique .. 是在 profiles 表里 .. 字段是 github .. 排除 user_id .. 对应的值是 auth.user.id ..
下面再添加一个 validation ... await validateAll .. 数据是 request.all() .. 规则是 rules ..
然后判断一下 .. 如果 validation.fails() .. 用 session ,flash 一条信息 .. withErrors .. 错误信息是 validation.messages() 返回的东西 .. 再 flashAll() ..
return 一个重定向 .. redirect .. back ...
在文件的顶部,我们需要把这个 validateAll .. 从 Validator 里面拿出来用一下 ...
更新
继续再编辑这个 update 方法 .. const ... username .. email .. github .. 等于 request.all ..
auth.user.merge ... username .. email ... 再保存一下 .. await auth.user.save() ..
然后再更新一下 profile .. await .. auth.user.profile() .. update ... github ...
下面可以再 flash 一条信息 .. type 是 success .. . message 信息是 Profile successfully updated. 最后再做一个重定向 .. redirect .. back ..
试验
回到用户帐户编辑页面 ... 直接提交一下这个表单 .. 会提示更新成功 ..
再试一下 .. 把用户名修改成小雪 ... 提交一下表单 ... 因为小雪这个用户名在 users 表里已经存在了,所以在验证 unqiue 的时候会出错 .. 这样也就不会保存更新的内容 ..
输入一个不存在的用户名 ... 提交一下更新 .. 会提示更新成功 ... 再把这个用户名换成原来的 王皓 ... 更新一下 ..
然后再试一下更新一下这个 github 帐号 .. 比如 xiaoxue8080 ...
也会出现一个 unique 错误 ... 因为在 profiles 表里面 .. 这个 github 帐号已经被使用了 ...
换一个其它的 github 帐号 ... 提交一下更新 ..
可以成功保存更新 ....
再把我的这个 github 帐号换成 wanghao8080 ... 然后再更新一下 ...