gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 02:17:17 30 4
gpt4 key购买 nike

我想问这个问题。但我认为 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();

至少应该不会有什么影响。

这个例子使用了 Behavior,但它可以被认为是任何其他属性。

最佳答案

我认为这太复杂了,你不应该担心。

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

但是你对它们所做的一切都是出于你作为程序员的良心。

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

您真正应该关心的唯一一件事是将它们从 rules() 部分的大量分配中排除,这样用户就无法修改它。这应该对所有手动处理的属性完成,不要忘记这一点。

希望对您有所帮助。

关于activerecord - Yii2:如何从外部将 ActiveRecord 对象的属性设置为只读?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33144276/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com