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], // 不允许空字符串