我想问一般。但我认为BlameableBehavior和TimestampBevavior可能是需要这样做的好例子:
我必须做什么才能从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();
至少它不会有任何影响。
此示例使用行为,但可以考虑任何其他属性。
答案 0 :(得分:4)
我认为这是过度复杂的,你不应该担心它。
所有Active Record属性都应保持可编辑状态。这些行为提供了什么 - 它只是自动化和某种抽象。
但你所做的一切都是作为程序员的良心。
有时候手动修改它们仍然很有用,所以完全锁定它没有任何意义。
你应该真正关心的唯一事情就是将它们排除在rules()
部分的大量作业之外,这样用户就无法对其进行修改。这应该使用所有手动处理的属性来完成,不要忘记。
希望它有所帮助。