传智黑马PHP69期-第7部分ThinkPhp-第3天TP-06_独立验证

第7部分 ThinkPhp

第3天 TP

06_独立验证

1.表单验证

表单验证是为了防止访问者跳过客户端验证(js验证)而造成的系统安全问题,一但非法用户绕过客户端验证而服务器端没有加以验证,这样就是很不安全了,所以项目必须要进行服务器端表单验证。

ThinkPHP5.1推荐使用验证器进行数据验证(也支持使用\think\Validate类进行独立验证)

内置规则:

https://www.kancloud.cn/manual/thinkphp5_1/354107

独立验证

$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验证

2.验证码

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模板

效果

 

posted on 2020-02-26 11:51  herisson_pan  阅读(34)  评论(0)    收藏  举报

导航