该验证器比对两个特定输入值之间的关系 是否与 operator 属性所指定的相同。

  • compareAttribute:用于与原属性相比对的属性名称。 当该验证器被用于验证某目标属性时, 该属性会默认为目标属性加后缀_repeat。 举例来说,若目标属性为 password,则该属性默认为 password_repeat
  • compareValue:用于与输入值相比对的常量值。 当该属性与 compareAttribute 属性同时被指定时,该属性优先被使用。
  • operator:比对操作符。默认为 ==,意味着检查输入值是否与 compareAttribute 或 compareValue 的值相等。 该属性支持如下操作符:
    • ==:检查两值是否相等。比对为非严格模式。
    • ===:检查两值是否全等。比对为严格模式。
    • !=:检查两值是否不等。比对为非严格模式。
    • !==:检查两值是否不全等。比对为严格模式。
    • >:检查待测目标值是否大于给定被测值。
    • >=:检查待测目标值是否大于等于给定被测值。
    • <:检查待测目标值是否小于给定被测值。
    • <=:检查待测目标值是否小于等于给定被测值。
  • type: 默认的比对类型是'string',此时将按照字节逐个对比。 当需要比对的值是数字时,需要设置类型$type为 'number',启用数字对比模式。

例如:

//验证合同约定期限必须大于0
            ['sales_contract_agreed_period', 'compare', 'compareValue' => 0, 'operator' => '>', 'message'=>'必须大于0'],
            //验证账龄必须大于0
            ['sales_contract_aging', 'compare', 'compareValue' => 0, 'operator' => '>', 'message'=>'必须大于0'],
            //验证应收款项必须大于0
            ['sales_contract_receivables', 'compare', 'compareValue' => 0, 'operator' => '>', 'message'=>'必须大于0'],

# 增加 type='number'表示当成数值类型比较,否则默认为字符串比较
[['produce_consume_weight'],'compare','compareAttribute'=>'wms_product_in_sheet_in_weight', 'type'=>'number', 'operator'=>'>=','message'=>'消耗量必须大于等于入库重量', 'on'=>self::SC_APPLICATION_FORM],

# 使用compreValue进行比较,但是compareValue只能使用固定的常量值或者使用其他数据模型的值,不能使用此数据模型的某个属性值
[['produce_consume_weight'], 'autoInputProduceConsumeWeight', 'when' => function ($model) {    return ($model->stock_origin_type=="生产加工" && $this->wms_partially_product_in_sheet_in_weight >= $this->getMaxInWeight());}, 'on'=>self::SC_APPLICATION_FORM],

[['produce_consume_weight'], 'validateProduceConsumeWeight', 'when' => function ($model) {    return ($model->stock_origin_type=="生产加工" && $this->wms_partially_product_in_sheet_in_weight < $this->getMaxInWeight());}, 'on'=>self::SC_APPLICATION_FORM],//在特定场景,特定单据类型情况下验证小于等于最大消耗量[['produce_consume_weight'], 'compare', 'compareValue'=>$this->getMaxProduceConsumeWeight(), 'type'=>'number', 'operator'=>'<=','message'=>'消耗量必须小于等于' . \common\models\Base::weightBcdiv($this->getMaxProduceConsumeWeight()), 'when' => function ($model) {    return $model->stock_origin_type=="生产加工" || empty($model->stock_origin_type);}, 'on'=>self::SC_APPLICATION_FORM],
public function autoInputProduceConsumeWeight($attribute, $params)    {        if($this->stock_origin_type=="生产加工" && $this->getScenario()==self::SC_APPLICATION_FORM) {            $this->produce_consume_weight = $this->getMaxProduceConsumeWeight();//            $this->addError('produce_consume_weight', '最后一次入库时必须等于剩余原料消耗量'. \common\models\Base::weightBcdiv($this->produce_consume_weight));        }    }

    public function validateProduceConsumeWeight($attribute, $params)    {        if($this->stock_origin_type=="生产加工" && $this->getScenario()==self::SC_APPLICATION_FORM) {//            if($this->wms_partially_product_in_sheet_in_weight = $this->getMaxInWeight()){//                $this->produce_consume_weight = $this->getMaxProduceConsumeWeight();//            }elseif ($this->produce_consume_weight < $this->wms_partially_product_in_sheet_in_weight) {//                $this->addError('produce_consume_weight', '必须大于等于入库重量');//            }elseif($this->produce_consume_weight < $this->getMaxProduceConsumeWeight()){//                $this->addError('produce_consume_weight', '消耗量必须小于等于' . \common\models\Base::weightBcdiv($this->getMaxProduceConsumeWeight()));//            }else{////            }            if ($this->produce_consume_weight < $this->wms_partially_product_in_sheet_in_weight) {                $this->addError('produce_consume_weight', '必须大于等于入库重量');            }        }    }

    public function getMaxInWeight(){        if($this->stock_origin_type=="生产加工" && $this->getScenario()==self::SC_APPLICATION_FORM){            $produceRecordSheetModel = \core\models\ProduceRecordSheet::findOne(['produce_record_sheet_code'=>$this->produce_record_sheet_number]);            $maxInWeight = bcsub(bcadd($produceRecordSheetModel->produce_record_sheet_product_weight, $produceRecordSheetModel->produce_record_sheet_byproduct_weight, 0) , $produceRecordSheetModel->_getProductInWeight(), 0);            return $maxInWeight;        }else{            return null;        }    }

    /**     * @return string     * 获取最大原料可消耗量     */    public function getMaxProduceConsumeWeight(){        if($this->stock_origin_type=="生产加工" && $this->getScenario()==self::SC_APPLICATION_FORM) {            $produceRecordSheetModel = \core\models\ProduceRecordSheet::findOne(['produce_record_sheet_code' => $this->produce_record_sheet_number]);            $all_consume_weight = \core\components\ArrayHelper::sumObjectColumn(\core\models\WmsPartiallyProductInSheet::find()->where(['or', ['is_del' => 0], ['is_del' => NULL]])->andWhere(['produce_record_sheet_number' => $this->produce_record_sheet_number, 'stock_origin_type' => '生产加工'])->all(), 'produce_consume_weight');            $max_produce_consume_weight = bcsub($produceRecordSheetModel->wms_material_out_sheet_out_weight,                bcadd($all_consume_weight, bcadd($produceRecordSheetModel->produce_record_sheet_retreat_weight, $produceRecordSheetModel->produce_record_sheet_tailing_weight, 0), 0),                0);            return $max_produce_consume_weight;        }else{            return null;        }    }

Yii的数值比较验证器的更多相关文章

  1. yii框架中验证器声明一组内置验证器可以使用短名称引用

    1.内置验证器的短名称分别有: boolean: yii\validators\BooleanValidator captcha: yii\captcha\CaptchaValidator compa ...

  2. yii 验证器和验证码

    http://www.yiiframework.com/doc/api/1.1/CCaptcha http://www.cnblogs.com/analyzer/articles/1673015.ht ...

  3. Thinkphp5 模型 验证器执行顺序问题

    Thinkphp5把模型的验证规则归为一个验证器,这种做法,不知到符不符合大家的心意,反正楼主是比较不爽的 楼主更倾向于tp3.2的验证规则直接写在模型里面,毕竟你的验证规则一般而言是针对模型来验证的 ...

  4. 两步验证杀手锏:Java 接入 Google 身份验证器实战

    两步验证 大家应该对两步验证都熟悉吧?如苹果有自带的两步验证策略,防止用户账号密码被盗而锁定手机进行敲诈,这种例子屡见不鲜,所以苹果都建议大家开启两步验证的. Google 的身份验证器一般也是用于登 ...

  5. PHP验证器类Validator

    Particle\Validator是一个小巧优雅的实用的PHP验证类库,提供了一个非常简洁的API.它无需依赖其他组件,提供友好的文档,并且有利于扩展. 安装 composer require pa ...

  6. 使用google身份验证器实现动态口令验证

    最近有用户反应我们现有的短信+邮件验证,不安全及短信条数限制和邮件收验证码比较慢的问题,希望我们 也能做一个类似银行动态口令的验证方式.经过对可行性的分析及慎重考虑,可以实现一个这样的功能. 怎么实现 ...

  7. 9、 Struts2验证(声明式验证、自定义验证器)

    1. 什么是Struts2 验证器 一个健壮的 web 应用程序必须确保用户输入是合法.有效的. Struts2 的输入验证 基于 XWork Validation Framework 的声明式验证: ...

  8. linux上使用google身份验证器(简版)

    系统:centos6.6 下载google身份验证包google-authenticator-master(其实只是一个.zip文件,在windwos下解压,然后传进linux) #cd /data/ ...

  9. vue-validator(vue验证器)

    官方文档:http://vuejs.github.io/vue-validator/zh-cn/index.html github项目地址:https://github.com/vuejs/vue-v ...

随机推荐

  1. RS-485总线通信协议

    https://blog.csdn.net/ouyangxin95/article/details/78174145 RS-485总线技术只是规定了接口的电气标准,并没有规定RS-485接口的电缆,插 ...

  2. Spring MVC Content Negotiation 转载

    Spring MVC Content Negotiation 2017年11月15日 00:21:21 carl-zhao 阅读数:2983   Spring MVC有两种方式生成output的方法: ...

  3. 深度学习框架PyTorch一书的学习-第六章-实战指南

    参考:https://github.com/chenyuntc/pytorch-book/tree/v1.0/chapter6-实战指南 希望大家直接到上面的网址去查看代码,下面是本人的笔记 将上面地 ...

  4. docker 8 docker的镜像命令

    先回顾一下容器.存储.镜像三者之间的关系. 我们知道docker的logo是一条大鲸鱼背上驮着集装箱.那我们对应到docker如下: 1)蓝色的大海里面------->宿主机系统比如我笔记本wi ...

  5. hbuilder IOS APP 打包与发布2

    在上一篇的<hbuilder IOS APP 打包与发布>中,请求 的 是APP ids .  ios开发证书 .和开发配置文件  ,   这一篇中就不写发布证书和配置文件的请求,因为流程 ...

  6. 朱晔的互联网架构实践心得S1E6:给飞机换引擎和安全意识十原则

    朱晔的互联网架构实践心得S1E6:给飞机换引擎和安全意识十原则 [下载本文PDF进行阅读] 本文有两个部分,先介绍一下给飞机换引擎这个事情我的一些经验,因为篇幅较短然后介绍一下安全意识方面的一些心得. ...

  7. Python入门-从HelloWorld开始

    前言 最近在招聘网上看了许多公司的招聘要求,发现很多公司希望求职者能会Python,特别是一些自动化测试的职位,以前对Python只是介于听说或是一些简单的了解,所以既然市场有需求,那么我们就来学习一 ...

  8. SQLServer 存储过程+定时任务发邮件

    SQLServer 代理发邮件需要开启SQL Server 代理服务器,然后,在[管理]-[数据库邮件]中,右键点击配置数据库邮件. 我用的是腾讯的企业邮箱,个人的163邮箱略微不同.下图是相关邮件的 ...

  9. c++入门之—运算符重载和友元函数

    运算符重载的意义是:将常见的运算符重载出其他的含义:比如将*重载出指针的含义,将<<与cout联合使用重载出输出的含义,但需要认识到的问题是:运算符的重载:本质仍然是成员函数,即你可以认为 ...

  10. 用python实现一个回文数

    判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向 ...