2019独角兽企业重金招聘Python工程师标准>>>

各位Yii2兄弟都知道Model的rules里面可以使用自己定义的验证规则,我们今天就把自定义规则做一个总结,进行一次彻底的知识归纳。

和以往一样,先列目录。

  1. 匿名函数形式
  2. 类的公共方法形式
  3. 自己建立验证类形式

提前准备

在User模型(User.php)里,我们想对一个字段username进行自定义验证,当username的值为abei的时候通过,否则提示“不是abei,不能通过。”

匿名函数形式

public function rules(){return [["username",function($attr,$params){if($this->$attr == 'abei'){return true;}else{$this->addError("username","不是abei,不能通过。");}}],];
}

我想你看明白了吧,很简单,直接将验证的逻辑写到一个匿名函数中和username对应上即可。这里的关键词是**$this->addError**,要记住。$attr代表当前被验证的字段,即username.

go on.

类的公共方法

public function rules(){return [["username","checkAbei"],];
}public function checkAbei($attr,$params){if($this->$attr == 'abei'){return true;}else{$this->addError("username","不是abei,不能通过。");}
}

这个也很好理解,换汤不换药,仅仅是将匿名函数提取出来了,记住在rules函数内,自定义验证规则的名字和实现验证的方法名字必须一致。

这两个方法都很简单,也很方便,但是~,缺点也是明显的,就是只能供给User模型使用。

在我们这样一个和谐且统一的国度里,这种情况是不提倡的,于是乎,出现了第三种方法

自定义验证类

我们可以建立一个自定义的验证类,然后供各种Model使用。那么开始吧。

首先,需要在components下面新建一个验证类,我们起名为CheckAbeiValidator。什么?没有components?晕,那就新建一个文件夹就好了嘛。

CheckAbeiValidator.php

namespace app\components;
use yii\validators\Validator;class CheckAbeiValidator extends Validator {public function validateAttribute($model, $attribute) {if($model->$attribute == 'abei'){return true;}else{$this->addError($model,$attribute,"不是abei,不能通过。");}}
}

你看到了么?CheckAbeiValidator继承于Validator,对Validator的validateAttribute进行重载,和上面两种方法基本一样,不同的是多了一个Model,这也对的,毕竟我是公共的,你总要告诉我是谁在让我验证,我需要告诉谁结果吧。

好,验证类好了,如何使用那?

现在我们回到User模型(User.php)

use app\components\CheckAbeiValidator;

首先我们需要使用这个类,use一下。然后....

public function rules(){return [["username",CheckAbeiValidator::className()],];
}

ok,这就是完事了,我们通过rules告诉username使用CheckAbeiValidator类来验证。

其他的模型如果想验证,也是和User一样,照着做就可以了。

这就是三种自定义验证规则的方法,希望对大家有帮助。

转载于:https://my.oschina.net/u/3683692/blog/2249552

教你三种Model(AR)中自定义验证规则的方法相关推荐

  1. iphone长截图哪个软件好_不会用iPhone长截图?教你三种超简单的iPhone长截图的方法...

    原标题:不会用iPhone长截图?教你三种超简单的iPhone长截图的方法 前段时间因为要给朋友截篇收费的文章,差不多我截了50几张,整个人快崩溃了,他问我iPhone不可以长截图吗?我才发现苹果还真 ...

  2. python字符串换行的三种方式_python中的字符串内部换行方法

    python中的字符串内部换行方法 python里有两种在字符串内部换行的方式(使用一个print打印多行字符串). 首先使用\n的方法大家肯定都知道了. 然后是使用 ''' 三个单引号大方法. 在交 ...

  3. jquery.validationEngine 自定义验证的使用方法

    一: 自定义验证规则 (1)  方法1 ,定义验证规则 $.validationEngineLanguage.allRules.name = {"regex": /^\w{5,10 ...

  4. cad转dxf格式文件太大_CAD转DXF怎么转换?教你三种转换方法

    CAD图纸在我们日常生活中都是可见到的,因为CAD图纸文件的格式是多样的,在工作中就需要经常将CAD的格式进行转换.那CAD转DXF怎么转换呢?这个问题很多的小伙伴们都遇到过,下面小编就来教大家三种转 ...

  5. python实时监控文件目录_教你三种方法,用 Python实时监控文件

    原标题:教你三种方法,用 Python实时监控文件 在业务稳定性要求比较高的情况下,运维为能及时发现问题,有时需要对应用程序的日志进行实时分析,当符合某个条件时就立刻报警,而不是被动等待出问题后去解决 ...

  6. 选择恐惧症福音!教你三种思维方式,像计算机一样做出最优决策

    CDA数据分析师 出品 编译:Mika [导读] 在需要做决定时,常常我们会感到不知所措.在本文中,认知科学家汤姆·格里菲斯向我们展示了如何运用计算机的逻辑来解决棘手的问题,分享了做出更好决策的三种实 ...

  7. 使用手机将图片转换成PNG格式怎么做?教你三种转换方法

    怎么使用手机把图片的格式转换成PNG格式呢?现如今的图片格式种类非常之多,有很多种格式的图片我们甚至都打不开它.有时我们需要上传一些照片文件,会有要求照片只能是PNG格式,遇到这种情况我们该怎么使用手 ...

  8. 两部苹果手机同步照片_怎么恢复苹果手机删除的照片?今天教你三种找回方法...

    原标题:怎么恢复苹果手机删除的照片?今天教你三种找回方法 怎么恢复苹果手机删除的照片?手机的出现虽然带给我们很大便利,同时却也带来了一些小的麻烦.在手机上很多操作步骤都很简单,因此,难免会遇到手滑误操 ...

  9. 【小白学习keras教程】十、三种Model Selection方法:k-fold cross-validation,GridSearchCV和RandomizedSearchCV

    @Author:Runsen Model Selection是划分训练集和测试集的手段,下面总结了三种Model Selection方法. k-fold cross-validation using ...

最新文章

  1. 【树莓派】关于tinyproxy问题处理
  2. [转]怎样看懂Oracle的执行计划
  3. git服务器维护 备份,gitlab服务运维,备份与恢复 - 橙子柠檬's Blog
  4. 微信小程序 --- 物流快递查询
  5. linux 命令chmod 755的意思
  6. Linux文件颜色与文件类型对应(白色、蓝色、红色、黄色、绿色 代表的意义。。。)
  7. 学计算机i58300够用嘛,酷睿i58300h处理器怎么样
  8. jsp主机与asp主机的区别和支持分析
  9. 简单好用的桌面日历便签软件有哪些?
  10. TensorFlow 2.1.0 使用 TFRecord 转存与读取图片
  11. 骨传导耳机的音质怎么样?
  12. 查询各科成绩最高分、最低分和平均分:以如下形式显示:课程ID,课程name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率--及格为>=60,中等为:70-80,优良为:80-90,优秀为:
  13. 集成MOB 社会分享遇到的坑
  14. 书籍推荐——一本老书,吴军老师《数学之美》
  15. PowerMock注解PowerMockIgnore的使用方法
  16. (《机器学习》完整版系列)附录 ——3、复合函数梯度的链式法则(链的次序不可交换)
  17. Hello World的正确打zhuang开bi方式———lambda表达式
  18. xarray官方文档 学习笔记(序章)
  19. 并行程序设计 MPI实现矩阵乘法(按行并行,分块并行,Cannon卡农算法)
  20. BZOJ1143: [CTSC2008]祭祀river 网络流_Floyd_最大独立集

热门文章

  1. 看完这篇,java遍历字符串列表
  2. 第 14 章 垃圾回收概述
  3. js实现表格的行删除和增加_vue小demo之实现表格的增加和删除
  4. 双步位移求解特征值matlab,数值分析——带双步位移的QR分解求特征值算法
  5. au如何关闭预览编辑器_VS Code如何内置Chrome浏览器?超简单
  6. mt4双线macd_手机版MT4怎样添加双线MACD指标 手机MT4双线MACD设置方法
  7. yum php mysql5.5_CentOS 5.5使用yum来安装LAMP(php运行环境)
  8. 二项式法在负荷计算机的应用,7.5二项式法确定计算负荷
  9. datatable更新到mysql_.NET_使用DataTable更新数据库(增,删,改),1、修改数据复制代码 代码如 - phpStudy...
  10. 计算机基础知识_计算机基础知识汇总