【问题标题】:Validation rules on behavior-created attributes行为创建属性的验证规则
【发布时间】:2015-03-26 15:23:23
【问题描述】:

我有一个模型,其中两个值必须是唯一的。 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 方法来验证这样的行为生成属性?

【问题讨论】:

  • “不能要求”是指无法访问这些值吗?当然? Component::__get($name) 在行为中寻找属性。我希望它应该可以访问。你能提供一些代码(尤其是验证规则)吗?
  • 通常我的意思是“不能要求”。如果你在规则中需要它,我不会保存。因此,在将行为输入添加到模型之前进行验证。

标签: yii2


【解决方案1】:

您可以使用行为的 'attributes' 属性指定将在其上创建属性的事件,因此您可以像这样修改模型:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多