zoukankan      html  css  js  c++  java
  • 如何使用thinkphp的model来验证前端表单?

    为了增加安全性, 在向model表中写入和修改数据时, 最好是调用 create方法来保证安全, 然后再调用add和save方法:

    if($Model->Validate($validate)->create()){
    ...
    $Model->add(..); || $Model->save(...);
    ...
    }else{
    $Model->getError(..);
    
    }
    

    关于类的定义中的const?

    类中的常量通常用const常量, 而且是大写的来表示, 使用时, 采用self::CONSTANT_NAME, 如:
    
    class Model {
        // 操作状态
        const MODEL_INSERT          =   1;      //  插入模型数据
        const MODEL_UPDATE          =   2;      //  更新模型数据
        const MODEL_BOTH            =   3;      //  包含上面两种方式
        const MUST_VALIDATE         =   1;      // 必须验证
        const EXISTS_VALIDATE       =   0;      // 表单存在字段则验证
        const VALUE_VALIDATE        =   2;      // 表单值不为空则验证
    
    

    在Application的Model文件夹中, 通常没有自定义的模型类, 因为, 你没有自定义的, 自己需要的对 表->表单 的自动验证, 自动完成等功能, 你可以直接使用Model类自己直接提供的方法和常量, 包括add, save, self::EXISTS_VALIDATE等都可以在app的模型中直接 使用, 但是如同跟其他类的继承的使用方法, 如要在继承的子类中定义自己的验证方法, 则要 "覆盖"override父类的这些成员属性:

    // 实际上, 这些属性本身都是父类自己所具有的,  只是为空, 所以在子类中,只是重写 override这些父类的属性...
        protected $_validate        =   array();  // 自动验证定义
        protected $_auto            =   array();  // 自动完成定义
        protected $_map             =   array();  // 字段映射定义
        protected $_scope           =   array();  // 命名范围定义
        // 是否自动检测数据表字段信息
    

    验证规则的写法:

    $_validate = array(
        array('验证字段1', 验证规则, '错误提示', [验证条件, 附加规则, 验证时间] ),
        array(验证字段2, 验证规则, 错误提示, [验证条件, 附加规则, 验证时间] ),
        array(验证字段3, 验证规则, 错误提示, [验证条件, 附加规则, 验证时间] ),...
    );
    

    // 验证字段, 一定要加引号的;
    // 验证规则, 是自己写的, 如 数字, 数组, 字符串等等, 当然, 你也可以使用 tp内置的验证规则, 包括: require,number, email, url,currency等,到底有多少内置的验证规则, 看源代码就知道了: 实际上, 你还可以指定 整数, 双精度数字, 英文字符: interger, 'double', 'english'...

    // 附加的验证规则, 是对前面的验证规则的一个 "说明/补充"...如: function, callback, regex, in, notin, between, notbetween, length(前面的验证规则表示输入的字符串的长度个数),
    主要是以下几个的说明:

    • confirm: 是对当前验证字段, 和前面的某个字段, 是否是一样的,
    • unique: 就是验证输入的字段值,在当前表中,是否是唯一的, 即是否已经有同样的值了, 那么前面的验证规则就应该设置为'' 空;

    验证的方式,分为静态验证和动态验证, 如果你只是对 前端表单 进行验证, 则不必创建一个专门的UserModel类, 可以使用 ThinkModel父类自己就有的validate方法, 这时候, 就可以直接用M方法, 而不必用D方法 (D方法 就等于 new HomeUserModel();). 此时, 验证规则就是一个普通的数组变量, 不是成员变量: $rules= array(..); $User=M('user'); $User->validate($rules); 这里的$rules不是 $_validate了. 这样做就比较简洁省事...

  • 相关阅读:
    原型链
    原型规则总结
    使用typeof能得到的哪些类型
    eslint 规则中文注释
    两张图片互相切换
    输入框获得焦点与失去焦点、阴影效果
    vue 写table的几种方式
    vue 注意事项
    angular 接口定义封装
    @NgModule
  • 原文地址:https://www.cnblogs.com/bkylee/p/6654817.html
Copyright © 2011-2022 走看看