小菜鸟一枚,初学TP5,现分享TP5**验证器学习心得,以系统登录验证为例.
1.登录页面表单以最简单的组合用户名,密码,提交按钮为例.
提交按钮type="submit"改为type=“button”,为增加用户体验使用ajax提交.
2.script脚本如下:
<!--ajax提交-->
<script>
$(function(){
$('#login').on('click', function(){
$.ajax({
type: 'POST',
url: "{:url('User/checkLogin')}",
data: $('form').serialize(),
dataType: 'json',
success: function(data){
if (data.status == 1) {
alert(data.message);
window.location.href="/";
//由于设置了路由Route::rule('/','index/index/index'); 跳转地址设为"/"
} else {
alert(data.message);
}
}
});
})
})
</script>
3.创建验证器及验证规则/场景
由于怕麻烦,将验证规则
r
u
l
e
和
返
回
信
息
m
e
s
s
a
g
e
都
以
数
组
形
式
写
在
rule和返回信息message都以数组形式写在
rule和返回信息message都以数组形式写在rule中,场景$scene设置login和register两个场景
<?php
namespace app\index\validate;
use think\Validate;
class User extends Validate
{
//$rule验证规则及返回信息
protected $rule=[
['name','require|alphaDash|length:4,12','用户名必填|用户名只能使用字母、数字、下划线_|用户名长度为4-12位'],
['password','require|length:6,12','密码必填|密码长度为6-12位'],
['email','require|email','邮箱必填|邮箱格式不正确']
];
//验证场景
protected $scene=[
'login'=>['name','password'], // 登录验证场景
'register'=>['email','name','password'], //注册验证场景
];
}
?>
3.数据提交到User控制器checkLogin方法下验证:
验证时使用一下代码:
$result = $this->validate($data,'User.login'); //使用User验证器中login场景验证
进行验证.
如果使用
$validate=validate('User');
$result = $validate->scene('login')->check($data);
进行验证,$result返回的是布尔值,而不是提示信息.
例如:
<?php
namespace app\index\controller;
use app\index\controller\Base;
use think\Request;
use think\Validate;
use app\index\model\User as UserModel;
class User extends Base
{
//登录页面
public function login()
{
return $this->view->fetch();
}
//登录验证
public function checkLogin(Request $request)
{
$status = 0; //验证失败标志
$result = '验证失败'; //失败提示信息
$data = $request -> param();
$result = $this->validate($data,'User.login'); //使用User验证器中login场景验证
//通过验证后,进行数据表查询
//此处必须全等===才可以,因为验证不通过,$result保存错误信息字符串,返回非零
if (true === $result) {
//查询条件
$map = [
'name' => $data['name'],
'password' => md5($data['password'])
];
//数据表查询,返回模型对象
$user = UserModel::get($map);
if (null === $user) {
$result = '没有该用户,请检查';
} else {
$status = 1;
$result = '验证通过,点击[确定]后进入后台';
}
}
return ['status'=>$status, 'message'=>$result, 'data'=>$data];
}
//退出登录
public function logout()
{
}
}