需要 YII 验证规则 - 需要的规则如何工作

YII validation rules required - how required rule works

我刚开始使用 Yii,我不了解模型规则中的必需规则何时或如何工作。

我有一篇关于 cols 的文章 table 标题,slug,body,created_at

slugcreated_at 列是在 php 中生成的,因此它们不是必需的 不是创建表单的一部分。如果我将 created_at 留在所需的规则中,它会抛出一个错误,因为缺少值。但是如果我在 required 规则中留下 slug 它不会抛出错误并且它有效。但是 slug 没有值,因为它稍后在 Php.

中生成

所以问题是,是否在 POST 数据上验证了所需的规则,或者何时将其插入数据库或...? 这是带有规则和行为的模型代码:

public function rules()
{
    return [
        //[['title', 'created_at', 'body'], 'required'],  // THIS THROWS AN ERROR cause created_at is not in POST
        [['title', 'slug', 'body'], 'required'],  // THIS SHOULD THROW AN ERROR cause slug is not in POST but it works. Why?
        [['body'], 'string'],
        [['created_at', 'updated_at', 'created_by'], 'integer'],
        [['title', 'slug'], 'string', 'max' => 100],
        [['created_by'], 'exist', 'skipOnError' => true, 'targetClass' => User::className(), 'targetAttribute' => ['created_by' => 'id']],
    ];
}

public function behaviors()
{
    return [
        TimestampBehavior::class,
        [
            'class' => BlameableBehavior::class,
            'updatedByAttribute' => FALSE,
        ],
        [
            'class' => SluggableBehavior::class,
            'attribute' => 'title',
        ]
    ];
}

SluggableBehaviorTimestampBehavior 使用不同的事件:

  1. SluggableBehavior 正在使用 ActiveRecord::EVENT_BEFORE_VALIDATE,因此在 验证之前会生成 slug,因此 required 规则不会抱怨缺少 slug,因为它是不再为空。
  2. TimestampBehavior 正在使用 ActiveRecord::EVENT_BEFORE_INSERTActiveRecord::EVENT_BEFORE_UPDATE 事件,这些事件在 验证后执行,因此目前带有日期的验证字段是空。