将唯一规则设置为yii2 rest

时间:2016-02-25 14:21:24

标签: rest yii2 yii2-validation

我正在使用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]]
        ];
    }

我在此处提到emailIdusernamecontactNumber字段应该是唯一的。当我尝试创建时,它正在检查字段是否唯一。如果唯一它抛出错误,否则它正在保存。那样就好。

但是当我尝试更新值时,它还检查字段的特定值是否唯一。但它不应该那样。 unique验证不适用于update action。因此,我使用'on'=>'update'更新了规则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]]
        ];
    }

但是当我检查official documentation时,没有像on这样的选项来检查特定的action。当我使用'on'=>'update'时,两者(在创建和更新时)放置它都没有验证。可能是因为on。离开那个吧。我需要为unique中的这些字段添加create action验证,而不是update action。{/ p>

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

感谢。

1 个答案:

答案 0 :(得分: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;
    }