1

我正在使用 yii2 创建一个 rest api 来创建和更新用户信息。下面是模型类中的规则函数。

public function rules()
    {
        return [
            [['name', 'emailId', 'contactNumber'], 'required'],
            [['name', 'emailId', 'contactNumber'], 'string', 'max' => 255]
            [['emailId', 'username', 'contactNumber'], 'unique'],
            ['status', 'default', 'value' => self::STATUS_ACTIVE],
            ['status', 'in', 'range' => [self::STATUS_ACTIVE, self::STATUS_DELETED]]
        ];
    }

这里我提到emailId, username,contactNumber字段应该是唯一的。当我尝试创建时,它正在检查该字段是否是唯一的。如果是唯一的,它会抛出错误,否则它正在保存。那也行。

但是当我尝试更新该值时,它也在检查该字段的特定值是否唯一。但它不应该是这样的。unique验证不应该在update action. 所以我用'on'=>'update'as like更新了规则Yii 1。检查以下功能。

public function rules()
    {
        return [
            [['name', 'emailId', 'contactNumber'], 'required'],
            [['name', 'emailId', 'contactNumber'], 'string', 'max' => 255]
            [['emailId', 'username', 'contactNumber'], 'unique', 'on'=>'update'],
            ['status', 'default', 'value' => self::STATUS_ACTIVE],
            ['status', 'in', 'range' => [self::STATUS_ACTIVE, self::STATUS_DELETED]]
        ];
    }

但是当我查看官方文档时,没有选项on可以查看特定的action. 当我使用'on'=>'update'时,两者(在创建和更新时)都没有验证。可能是因为on. 就这样吧。我需要unique为那些字段添加验证,而create action不是在update action.

所以,请任何人帮助我如何仅在创建操作中向这些字段添加唯一验证。

谢谢。

4

1 回答 1

2

您可以为您的REST操作设置场景ActiveController

public function actions()
    {
        $actions = parent::actions();
        $actions['update']['scenario'] = 'update';
        $actions['create']['scenario'] = 'create';
        return $actions;
    }

然后在规则中使用它:

[['emailId', 'username', 'contactNumber'], 'unique', 'on'=>'create']

您还必须为特定模型类中的每个场景指定活动属性列表:

public function scenarios()
    {
        $scenarios = parent::scenarios();
        $scenarios['update'] = ['type', 'title', 'description'];
        $scenarios['create'] = ['type', 'title', 'description', 'affiliate_id'];
        return $scenarios;
    }
于 2016-02-25T14:37:05.453 回答