Yii2.0 模型规则(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’
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值