Yii REST 更新中至少需要 1 个字段的表单模型验证
Form model validation atleast 1 field is required in Yii REST Update
我是 Yii 框架的新手,我陷入了一个简单的检查天气的任务,用户是否为更新请求提供了任何输入。
考虑以下代码
型号代码:
class Car extends ActiveRecord {
public $id;
public $name;
public $registration;
public $created_at;
public function sceanrios(){
return ['create'=>['name','registration'],
'update'=>['name','registration']];
}
public function rules(){
return [['name','registration'],'required','on'=>'create']
}
}
控制器:
class CarController extends yii\rest\ActiveController{
public $modelClass = 'models/Car';
}
当我向 CarController 发送 PUT 请求而没有发布任何属性时,它给出了 200 OK 响应。
我想要一个验证规则来检查用户是否实际发布了任何值,然后 return 更新后确定; else return 错误信息 "Atleast one field should be set to update"
我发现以下解决方案 Yii2 dependency custom rule validation 仅适用于 POST 请求,即在创建场景中,但在更新场景中不起作用,因为 $this->attribute 保留旧值。
具有相同问题的另一个解决方案 Yii form model validation- either one is required 不适用于 PUT 请求
发现许多其他的它们只适用于新记录,而不适用于更新现有记录。
这个有验证器吗?
我根据@silverFire 的想法自己开发了解决方案,并在此处发布了答案。我们所需要的只是一个验证回调函数,它将检查脏属性。所以汽车 class 将如下所示:
class Car extends ActiveRecord {
public $id;
public $name;
public $registration;
public $created_at;
public function sceanrios(){
return ['create'=>['name','registration'],
'update'=>['name','registration']];
}
public function rules(){
return [
[['name','registration'],'required','on'=>'create'],
[['name','registration'], 'atLeastOne' 'on'=>'update'],
];
}
public function atLeastOne($attribute, $params)
{
if(empty($this->getDirtyAttributes(['name','registration'])){
$this->addError($attribute, "Nothing to update");
}
}
}
我是 Yii 框架的新手,我陷入了一个简单的检查天气的任务,用户是否为更新请求提供了任何输入。
考虑以下代码
型号代码:
class Car extends ActiveRecord {
public $id;
public $name;
public $registration;
public $created_at;
public function sceanrios(){
return ['create'=>['name','registration'],
'update'=>['name','registration']];
}
public function rules(){
return [['name','registration'],'required','on'=>'create']
}
}
控制器:
class CarController extends yii\rest\ActiveController{
public $modelClass = 'models/Car';
}
当我向 CarController 发送 PUT 请求而没有发布任何属性时,它给出了 200 OK 响应。
我想要一个验证规则来检查用户是否实际发布了任何值,然后 return 更新后确定; else return 错误信息 "Atleast one field should be set to update"
我发现以下解决方案 Yii2 dependency custom rule validation 仅适用于 POST 请求,即在创建场景中,但在更新场景中不起作用,因为 $this->attribute 保留旧值。
具有相同问题的另一个解决方案 Yii form model validation- either one is required 不适用于 PUT 请求
发现许多其他的它们只适用于新记录,而不适用于更新现有记录。
这个有验证器吗?
我根据@silverFire 的想法自己开发了解决方案,并在此处发布了答案。我们所需要的只是一个验证回调函数,它将检查脏属性。所以汽车 class 将如下所示:
class Car extends ActiveRecord {
public $id;
public $name;
public $registration;
public $created_at;
public function sceanrios(){
return ['create'=>['name','registration'],
'update'=>['name','registration']];
}
public function rules(){
return [
[['name','registration'],'required','on'=>'create'],
[['name','registration'], 'atLeastOne' 'on'=>'update'],
];
}
public function atLeastOne($attribute, $params)
{
if(empty($this->getDirtyAttributes(['name','registration'])){
$this->addError($attribute, "Nothing to update");
}
}
}