将唯一规则设置为 yii2 rest 更新操作的字段
Set unique rule to a field on update action on yii2 rest
我正在用 yii2 创建一个 rest api 来创建和更新用户信息。下面是模型中的规则函数 class.
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
。就这样吧。我需要为 create action
中的那些字段添加 unique
验证,而不是 update action
.
所以,请任何人帮助我如何仅在创建操作中向这些字段添加唯一验证。
谢谢。
您可以在 ActiveController
中为您的 REST
操作设置场景:
public function actions()
{
$actions = parent::actions();
$actions['update']['scenario'] = 'update';
$actions['create']['scenario'] = 'create';
return $actions;
}
然后在规则中使用它:
[['emailId', 'username', 'contactNumber'], 'unique', 'on'=>'create']
您还必须为特定模型中的每个场景指定活动属性列表 class:
public function scenarios()
{
$scenarios = parent::scenarios();
$scenarios['update'] = ['type', 'title', 'description'];
$scenarios['create'] = ['type', 'title', 'description', 'affiliate_id'];
return $scenarios;
}
我正在用 yii2 创建一个 rest api 来创建和更新用户信息。下面是模型中的规则函数 class.
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
。就这样吧。我需要为 create action
中的那些字段添加 unique
验证,而不是 update action
.
所以,请任何人帮助我如何仅在创建操作中向这些字段添加唯一验证。
谢谢。
您可以在 ActiveController
中为您的 REST
操作设置场景:
public function actions()
{
$actions = parent::actions();
$actions['update']['scenario'] = 'update';
$actions['create']['scenario'] = 'create';
return $actions;
}
然后在规则中使用它:
[['emailId', 'username', 'contactNumber'], 'unique', 'on'=>'create']
您还必须为特定模型中的每个场景指定活动属性列表 class:
public function scenarios()
{
$scenarios = parent::scenarios();
$scenarios['update'] = ['type', 'title', 'description'];
$scenarios['create'] = ['type', 'title', 'description', 'affiliate_id'];
return $scenarios;
}