我有一个带有两个值的模型,它们必须是唯一的。 Yii2有一个验证规则:
[['object_id', 'created_by'], 'unique', 'targetAttribute' => ['object_id', 'created_by']]
created_by
属性是以可责备的行为生成的:
public function behaviors()
{
return [
'blameable' => [
'class' => BlameableBehavior::className(),
'createdByAttribute' => 'created_by',
'updatedByAttribute' => 'updated_by',
],
];
}
验证在行为输入存储在模型中之前完成。 (我知道这一点,因为如果规则中需要created_by
,模型将不会保存 - 验证错误。)
是否有一种良好的yii2方式来验证这样的行为生成属性?
答案 0 :(得分:5)
您可以使用'属性'指定要创建属性的事件。行为的属性,所以你可以像这样修改你的控制器;
public function behaviors()
{
return [
'blameable' => [
'class' => BlameableBehavior::className(),
'createdByAttribute' => 'created_by',
'updatedByAttribute' => 'updated_by',
'attributes' => [
ActiveRecord::EVENT_BEFORE_VALIDATE => ['updated_by', 'created_by']
]
],
];
}