我正在使用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'
更新了规则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>
所以,请任何人帮我解决如何仅在创建操作中为这些字段添加唯一验证。
感谢。
答案 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;
}