Yii的数值比较验证器
该验证器比对两个特定输入值之间的关系 是否与 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的数值比较验证器的更多相关文章
- yii框架中验证器声明一组内置验证器可以使用短名称引用
1.内置验证器的短名称分别有: boolean: yii\validators\BooleanValidator captcha: yii\captcha\CaptchaValidator compa ...
- yii 验证器和验证码
http://www.yiiframework.com/doc/api/1.1/CCaptcha http://www.cnblogs.com/analyzer/articles/1673015.ht ...
- Thinkphp5 模型 验证器执行顺序问题
Thinkphp5把模型的验证规则归为一个验证器,这种做法,不知到符不符合大家的心意,反正楼主是比较不爽的 楼主更倾向于tp3.2的验证规则直接写在模型里面,毕竟你的验证规则一般而言是针对模型来验证的 ...
- 两步验证杀手锏:Java 接入 Google 身份验证器实战
两步验证 大家应该对两步验证都熟悉吧?如苹果有自带的两步验证策略,防止用户账号密码被盗而锁定手机进行敲诈,这种例子屡见不鲜,所以苹果都建议大家开启两步验证的. Google 的身份验证器一般也是用于登 ...
- PHP验证器类Validator
Particle\Validator是一个小巧优雅的实用的PHP验证类库,提供了一个非常简洁的API.它无需依赖其他组件,提供友好的文档,并且有利于扩展. 安装 composer require pa ...
- 使用google身份验证器实现动态口令验证
最近有用户反应我们现有的短信+邮件验证,不安全及短信条数限制和邮件收验证码比较慢的问题,希望我们 也能做一个类似银行动态口令的验证方式.经过对可行性的分析及慎重考虑,可以实现一个这样的功能. 怎么实现 ...
- 9、 Struts2验证(声明式验证、自定义验证器)
1. 什么是Struts2 验证器 一个健壮的 web 应用程序必须确保用户输入是合法.有效的. Struts2 的输入验证 基于 XWork Validation Framework 的声明式验证: ...
- linux上使用google身份验证器(简版)
系统:centos6.6 下载google身份验证包google-authenticator-master(其实只是一个.zip文件,在windwos下解压,然后传进linux) #cd /data/ ...
- vue-validator(vue验证器)
官方文档:http://vuejs.github.io/vue-validator/zh-cn/index.html github项目地址:https://github.com/vuejs/vue-v ...
随机推荐
- 002_关于six版本过低报cannot import name urllib_parse的问题
一. 参考:https://github.com/Parsely/pykafka/issues/222 [root@jyall.com tmp]#python check.py #报错如下 Trace ...
- 带返回结果的批量任务执行 CompletionService
转自 :http://blog.csdn.net/lmj623565791/article/details/27250059 一般情况下,我们使用Runnable作为基本的任务表示形式,但是Runna ...
- 利用Oracle分析函数row_number和sys_connect_by_path实现多行数据合并为一行
emo场景,以oracle自带库中的表emp为例: select ename,deptno from emp order by deptno; ENAME DEPTNO CLARK 10 KING 1 ...
- WPF在Canvas中绘图实现折线统计图
最近在WPF中做一个需要实现统计的功能,其中需要用到统计图,之前也没有接触过,度娘上大多都是各种收费或者免费的第三方控件,不想用第三方控件那就自己画一个吧. 在园子还找到一篇文章,思路来自这篇文章,文 ...
- NuGet的本地服务器安装与Package的发布(呕吐)
主要的步骤是按照下面的例子来做的: NuGet学习笔记(1)——初识NuGet及快速安装使用 NuGet学习笔记(2)——使用图形化界面打包自己的类库 NuGet学习笔记(3)——搭建属于自己的NuG ...
- 三、xadmin----内置插件
1.Action Xadmin 默认启用了批量删除的事件,代码见xadmin-->plugins-->action.py DeleteSelectedAction 如果要为list列表添 ...
- python 链接 redis 失败 由于目标计算机积极拒绝,无法连接
whereis redis-cli ps -ef |grep redis 1.启动redis redis-server & 2.查看redis 进程 ps -ef |grep redis 3. ...
- SQL Server(2000,2005,2008):恢复/回滚时间比预期长(译)
我已经讨论了各种确定恢复状态的方法,但是本周我参与了一个围绕回滚的有趣讨论.交易已经运行了14个小时,然后发出了KILL SPID.SPID进入回滚,并发生2天和4小时. 自然的问题是为什么不14小时 ...
- 在IDEA中配置Spring的XML装配
不考虑混合模式的话,Spring有三类装配Bean的方法,自动装配和Java代码装配都会很容易上手,但在弄XML装配时遇到了问题,这与IDEA环境有关. 装配时需要在源码中配置XML文件的位置,我看别 ...
- CI框架在控制器中切换读写库和读写库
CodeIgniter框架版本:3.1.7 ,php版本:5.6.* ,mysql版本:5.6 在Ci框架中,可以在application/config/database.php中配置多个group, ...