Yii2:如何从外部将ActiveRecord对象的属性设为只读?

时间:2015-10-15 09:07:09

标签: activerecord yii2 rules

我想问一般。但我认为BlameableBehaviorTimestampBevavior可能是需要这样做的好例子:

我必须做什么才能从ActiveRecord对象的外部读取属性但不能修改属性?在某些情况下,它应该在内部修改,就像上面提到的行为所要求的那样。但绝不是从外面来的。怎么能实现这个目标?使用validation rules?被重写的二传手?还原更新事件的属性?

示例

这应该按预期工作,因为它是课程的一部分,被视为内部':

/**
 * @property integer $created_by
 * @property integer $updated_by
 */
class Item extends ActiveRecord {

    public function behaviors() {
        return [
            [
                'class'              => BlameableBehavior::className(),
                'createdByAttribute' => 'created_by',
                'updatedByAttribute' => 'updated_by',
            ],
        ];
    }
}

这不可能。如何实现:

$item->created_by = $user->id;
$item->save();

至少它不会有任何影响。

此示例使用行为,但可以考虑任何其他属性。

1 个答案:

答案 0 :(得分:4)

我认为这是过度复杂的,你不应该担心它。

所有Active Record属性都应保持可编辑状态。这些行为提供了什么 - 它只是自动化和某种抽象。

但你所做的一切都是作为程序员的良心。

有时候手动修改它们仍然很有用,所以完全锁定它没有任何意义。

你应该真正关心的唯一事情就是将它们排除在rules()部分的大量作业之外,这样用户就无法对其进行修改。这应该使用所有手动处理的属性来完成,不要忘记。

希望它有所帮助。