Yii2 使用 when 验证器通过第二个模型进行验证
Yii2 validate by second model with when validator
是否可以通过when validator通过另一个模型进行验证?我的意思是:
return [
[['user_id', 'country_id', 'region_id', 'city_id'], 'integer'],
[['name', 'address', 'eik', 'mol', 'dds'], 'string'],
[['name', 'address', 'mol'], 'string', 'max' => 255],
[['eik'], 'string', 'max' => 40],
[['dds'], 'string', 'max' => 1],
[
[
'user_id',
'country_id',
'region_id',
'city_id',
'name',
'address',
'eik',
'mol',
'dds',
],
'required',
'on' => self::SCENARIO_UPDATE,
'when' => function($model ( THIS SHOULD BE THE SECOND MODEL ) ){
return $model->someField;
},
'whenClient' => 'function(attribute, value){
return $("#someSelector").val() == 2
}'
]
];
假设 when
条件中的 $model
是 model B
。当我向 model B
字段添加值时,应该启用验证。在客户端部分,我可以通过它的选择器选择任何字段,但是服务器端部分可以吗?
我猜这不是最好的解决方案,但你可以试试这个:
'when' => function(){
if(Yii::$app->request->post('YOUR_MODEL_B')['YOUR_ATTRIBUTE']=="whatever"){
// do your thing
}
}
您可以将此相关模型分配给主模型:
$model = new MyModel();
$model->someModel = new SomeModel();
$model->someModel->load(Yii::app()->request->post());
$model->load(Yii::app()->request->post());
然后在MyModel
的验证规则中:
'when' => function($model){
return $model->someModel->someField;
},
但是如果你有这样的问题,那么这是一个好兆头,你不应该直接使用 ActiveRecord
来处理这个表格。您应该创建专门用于处理此指定表单及其所有字段的单独表单模型。
是否可以通过when validator通过另一个模型进行验证?我的意思是:
return [
[['user_id', 'country_id', 'region_id', 'city_id'], 'integer'],
[['name', 'address', 'eik', 'mol', 'dds'], 'string'],
[['name', 'address', 'mol'], 'string', 'max' => 255],
[['eik'], 'string', 'max' => 40],
[['dds'], 'string', 'max' => 1],
[
[
'user_id',
'country_id',
'region_id',
'city_id',
'name',
'address',
'eik',
'mol',
'dds',
],
'required',
'on' => self::SCENARIO_UPDATE,
'when' => function($model ( THIS SHOULD BE THE SECOND MODEL ) ){
return $model->someField;
},
'whenClient' => 'function(attribute, value){
return $("#someSelector").val() == 2
}'
]
];
假设 when
条件中的 $model
是 model B
。当我向 model B
字段添加值时,应该启用验证。在客户端部分,我可以通过它的选择器选择任何字段,但是服务器端部分可以吗?
我猜这不是最好的解决方案,但你可以试试这个:
'when' => function(){
if(Yii::$app->request->post('YOUR_MODEL_B')['YOUR_ATTRIBUTE']=="whatever"){
// do your thing
}
}
您可以将此相关模型分配给主模型:
$model = new MyModel();
$model->someModel = new SomeModel();
$model->someModel->load(Yii::app()->request->post());
$model->load(Yii::app()->request->post());
然后在MyModel
的验证规则中:
'when' => function($model){
return $model->someModel->someField;
},
但是如果你有这样的问题,那么这是一个好兆头,你不应该直接使用 ActiveRecord
来处理这个表格。您应该创建专门用于处理此指定表单及其所有字段的单独表单模型。