问题
用thinkphp5.1设计一系统,会员注册时候使用验证器验证表单数据,对用户名使用unique验证规则,但是实际执行不起作用,发现了用户名竟然重名!!!
解决过程
1.查看验证代码,初始用户名中没有发现unique规则
2.查看验证场景代码,发现验证代码是:
...
->append('username','unique:user')
->append('username','chkUsername')
->append('mobile','chkMobile');
3.有unique规则,为什么不起作用呢?火大,查了官方文档,百度了遇到同样问题的文章,有人说这个unique规则存在bug!How ?
4.屏蔽了下边的两行
...
->append('username','unique:user')
/*->append('username','chkUsername')
->append('mobile','chkMobile')*/;
注册重复账号测试输出,发现 unique验证规则是有效的。
5.重新启用下边的验证
...
->append('username','unique:user')
->append('username','chkUsername')
/*->append('mobile','chkMobile')*/;
刷新重复账号注册测试输出页,发现 unique验证规则又无效了!!!
6.初步判定后边的 chkUsername验证,是不是影响到了前边的 unique验证,查阅官方文档,官方建议是append追加、移除remove时,必须是一个字段一个append或者remove完成,分成两个的话,就会出问题,前边的规则无效,最后一个规则才生效。最终改成:
...
->append('username','unique:user|chkUsername')
->append('mobile','chkMobile');
解决!
结论
1.验证器自定义验证规则,append、remove时,一个字段保证只有一个append、remove语句。
2.有问题先看官方文档,总是对的!!!