创建验证类
# 创建验证器
php think make:validate 模块名/验证器名(首字母大写)
ThinkPHP5.1推荐使用验证器进行数据验证(也支持使用\think\Validate类进行独立验证)
内置规则:
https://www.kancloud.cn/manual/thinkphp5_1/354107
独立验证(就是写到Controller层,不推荐)
https://www.kancloud.cn/manual/thinkphp5_1/354107
use think\Validate;
$validate = Validate::make([
'name' => 'require|max:25',
'email' => 'email'
],[
'name.require' => '名称必须填写',
'name.max' => '名称最多只能是25字',
'email.email' => '邮箱不合法'
]);
$data = [
'name' => 'thinkphp',
'email' => 'thinkphp@qq.com'
];
if (!$validate->check($data)) {
dump($validate->getError());
}
# 自定义验证规则
Validate::extend('checkName', function ($value, $rule) {
return $rule == $value ? true : '名称错误';
});
验证器(单独的文件,推荐)
thinkphp5.1之后推荐使用的方式,验证器,就是一个独立的文件,此文件就干一件事件,验证。
# 创建验证器
php think make:validate 模块名/验证器名(首字母大写)
# 验证器
namespace app\index\validate;
use think\Validate;
class User extends Validate
{
protected $rule = [
'name' => 'require|max:25',
'age' => 'number|between:1,120',
'email' => 'email',
];
protected $message = [
'name.require' => '名称必须',
'name.max' => '名称最多不能超过25个字符',
'age.number' => '年龄必须是数字',
'age.between' => '年龄只能在1-120之间',
'email' => '邮箱格式错误',
];
}
# 控制器
$ret = $this->validate($request->post(),User::class);
if (true !== $ret){
dump($ret);
}
csrf验证
验证码
https://www.kancloud.cn/manual/thinkphp5_1/354122
tp5框架中默认没有自带验证码功能,需要我们自己去引入安装
# 官方提供的tp官方验证码类
composer require topthink/think-captcha
# 模板中引用
<div>{:captcha_img()}</div>
或者(推荐)
<div><img src="{:captcha_src()}" alt="captcha" /></div>
# 验证
$this->validate($data,[
'code'=>'require|captcha'
]);
或者
if(!captcha_check($captcha)){
// 验证失败
};
验证器去验证
控制器
独立去验证验证码
html模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户登录</title>
<link rel="stylesheet" href="/static/index/css/bootstrap.css"/>
<link rel="stylesheet" href="/static/index/css/bootstrap-theme.css"/>
<style>
#vcode {
cursor: pointer;
}
</style>
</head>
<body>
<br>
<div class="container">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">用户登录</h3>
</div>
<div class="panel-body">
<form class="form-horizontal" method="post" action="{:url('login')}">
<!--csrf验证-->
{:token()}
<div class="form-group">
<label class="col-sm-2 control-label">账号:</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="username">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">密码:</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="password">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">验证码:</label>
<div class="col-sm-5">
<input type="text" class="form-control" name="code">
</div>
<div class="col-sm-5">
<img src="{:captcha_src()}" id="vcode">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-success">用户登录</button>
</div>
</div>
</form>
</div>
</div>
</div>
<script src="/static/js/jquery.min.js"></script>
<script src="/static/index/js/bootstrap.js"></script>
<script>
// 点击更新验证码图片
$('#vcode').click(function () {
let src = $(this).attr('src') + '?vt=' + Math.random();
$(this).attr('src',src);
})
</script>
</body>
</html>