> 技术文档 > Yii2.0 模型规则(rules)详解_yii2 rules

Yii2.0 模型规则(rules)详解_yii2 rules


一、基本语法结构

public function rules(){ return [ // 规则1 [[\'attribute1\', \'attribute2\'], \'validator\', \'options\' => value, ...], // 规则2 [\'attribute\', \'validator\', \'options\' => value, ...], // 规则3... ];}

二、规则类型分类

1、核心验证器(内置验证器)

格式验证类:

  • boolean:验证是否为布尔值
  • email:验证是否为有效邮箱格式
  • string:验证是否为字符串
  • number:验证是否为数字
  • double:验证是否为浮点数
  • integer:验证是否为整数
  • date:验证是否为日期格式
  • time:验证是否为时间格式
  • datetime:验证是否为日期时间格式
  • url:验证是否为有效URL
[\'email\', \'email\'],[\'age\', \'integer\'],[\'website\', \'url\', \'defaultScheme\' => \'http\'],

范围验证类:

  • in:验证是否在给定列表
  • notIn:验证值是否不在给定列表中
  • range:验证数值是否在范围内
  • compare:比较两个属性的值
[\'status\', \'in\', \'range\' => [1, 2, 3]],[\'priority\', \'compare\', \'compareValue\' => 10, \'operator\' => \'>=\'],

存在性验证:

  • required: 验证是否为必填
  • default:验证默认值(非严格验证)
  • exist:验证值是否存在与数据库中
  • unique:验证值在数据库中是否唯一
[[\'username\', \'password\'], \'required\'],[\'category_id\', \'exist\', \'targetClass\' => Category::class, \'targetAttribute\' => \'id\'],[\'email\', \'unique\', \'targetClass\' => User::class],

其他验证:

  • filter: 数据过滤
  • match:正则表达式验证
  • trim:去除首尾空格
  • safe:标记属性为安全(不验证)
[\'username\', \'match\', \'pattern\' => \'/^[a-z]\\w*$/i\'],[\'content\', \'filter\', \'filter\' => \'strip_tags\'],[\'auth_key\', \'default\', \'value\' => Yii::$app->security->generateRandomString()],

2、行内验证器

在模型内部定义方法

public function rules(){ return [ [\'password\', \'validatePassword\'], ];}public function validatePassword($attribute, $params){ if (strlen($this->$attribute) < 8) { $this->addError($attribute, \'密码长度不能少于8个字符\'); }}

3、匿名函数验证器

public function rules(){ return [ [\'agree\', function($attribute, $params) { if ($this->$attribute != 1) { $this->addError($attribute, \'必须同意条款\'); } }], ];}

三、高级规则配置

1、条件验证(when)

[\'state\', \'required\', \'when\' => function($model) { return $model->country == \'USA\';}],

2、客户端验证

[\'captcha\', \'captcha\', \'captchaAction\' => \'site/captcha\', \'skipOnEmpty\' => false],

3、指定场景验证(on/except)

[\'password\', \'required\', \'on\' => \'register\'],[\'email\', \'required\', \'except\' => \'guest\'],

4、空值处理

[\'description\', \'default\', \'value\' => null], // 允许为空[\'status\', \'required\', \'skipOnEmpty\' => false], // 不允许空字符串

四、规则选项详解

通用选项

选项 说明 示例 解释 用法 结果 message 定义错误信息 ‘message’=> ‘{attribute}不能为空’ {attribute}为占位符 [[‘username’, ‘password’], ‘required’, ‘message’=> ‘{attribute}不能为空’] username不能为空或者password不能为空 skipOnEmpty 为空时是否跳过验证 ‘skipOnEmpty’ => true skipOnError 当属性已有错误时是否跳过 ‘skipOnError’ => true when 条件验证回调 ‘when’ => function($model) { … } on 适用场景 ‘on’ => [‘create’, ‘update’] except 排除场景 ‘except’ => ‘delete’