Update
What I suspect is the reason behind you are saying that it isn't working is because you are trying to achieve it on the frontend form or client side whereas you are using when
in your current set of rules which does not give any idea if you are failing to do it at the frontend form, and it is'nt mentioned anywhere. Although it is working if you initialize the model manually and assign the values on the server side.
If that is correct you need to use the whenClient
along with the when
option for the rules.
See the updated rules below
return [
[
['family'], 'required', 'when' => function ($model) {
return $model->patronymic !== null || $model->name !== null;
},
'whenClient' => 'function(attribute,value){
return $("#' . \yii\helpers\Html::getInputId($this, 'patronymic') . '").val()!=="" || $("#' . \yii\helpers\Html::getInputId($this, 'name') . '").val() !=="";
}',
],
[
['patronymic'], 'required', 'when' => function ($model) {
return $model->family !== null || $model->name !== null;
},
'whenClient' => 'function(attribue,value){
return $("#' . \yii\helpers\Html::getInputId($this, 'family') . '").val()!=="" || $("#' . \yii\helpers\Html::getInputId($this, 'name') . '").val() !=="";
}',
],
[
['name'], 'required', 'when' => function ($model) {
return $model->patronymic !== null || $model->family !== null;
},
'whenClient' => 'function(attribute,value){
return $("#' . \yii\helpers\Html::getInputId($this, 'patronymic') . '").val()!=="" || $("#' . \yii\helpers\Html::getInputId($this, 'name') . '").val() !=="";
}',
],
];
You require "if one of the fields is filled, then the rest are required." change the conditions to OR
instead of AND
for example return $model->name != null and $model->patronymic != null;
should be return $model->name != null OR $model->patronymic != null;
, currently you are checking if both are not null then the field is required , which is inverse of what you want.
After changing your rules should look like below
[
['family'],
'required',
'when' => function ($model) {
return $model->name != null || $model->patronymic != null;
},
],
[
['name'],
'required',
'when' => function ($model) {
return $model->family != null || $model->patronymic != null;
},
],
[
['patronymic'],
'required',
'when' => function ($model) {
return $model->family != null || $model->name != null;
},
],