thinkphp5第34课:验证器

在往数据表中写入数据时,务必要验证数据的必要性和合法性,防止垃圾数据存入数据表中。这种验证一般都在前端实现,使用javascript和jquery,或者一些验证插件来实现。

但是,我们一定要记录,前端的所有验证都是不可靠的。我们使用前验验证的目的主要是节省服务器压力和网络流量,提交用户的使用效果,仅此而已。普通的黑客就可以轻而易举地绕过前端验证,伪造数据直接访问访问器。

所以,为了安全起见,服务器端也要做验证,起到双重保险的作用。

这就是我们讲验证器的目的。验证器也是一个类文件,要把它定义在模块的validate目录中。

下面来看一下,如何定义验证器

<?php
namespace app\index\validate;
use think\Validate;

//学生验证器
class Student extends Validate
{
    //验证规则
    protected $rule = [
        'no' => 'require|integer',
        'name' => 'require',
        'sex' => 'require',
        'age' => 'integer'
    ];

    //错误信息
    protected $message = [
        'no.require' => '学号必须',
        'no.integer' => '学号必须是数字',
        'name' => '姓名必须',
        'sex' => '性别必须',
        'age' => '年龄必须是数字'
    ];

}

验证器的名称一般和数据表相同,它有两个属性:$rule  和 $message,分别存放各个字段的验证规则和错误信息.

其中,验证规则最为复杂,详细情况可以参见thinkphp5手册

下面是使用验证器

public function do_add()
    {
        $data = input('post.');
        //实例化模型对象
        $stu = new Student();
        try{
            $ret = $stu->allowField(true)->validate(true)->save($data); //保存数据,返回影响的行数
            if(false === $ret){
                $this->error($stu->getError());
            }else{
                $this->success('添加成功',url('index'),'',1);
            }

        }catch (Exception $ex){
            $this->error('保存失败,' . $ex->getMessage());
        }
    }

在使用模型保存数据前,使用validate(true)进行数据验证,如果验证不通过,返回false;验证通过后才会保存数据。

错误信息可以调用 模型的getError() 获取。

validate(true)会自动调用 当前模型对应的User验证器类进行数据验证。

如果需要调用的验证器类和当前的模型名称不一致,则可以使用

validate('验证器名')

当我们在填写表单时,写入了一些非法数据,如

如:学号 写入了“abc" ,这个数据是不符合要求的,当点击【提交】时,会显示以下页面

发布了136 篇原创文章 · 获赞 43 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/lsmxx/article/details/103017105
今日推荐