Обновление
Я подозреваю, что причина, по которой вы говорите, что она не работает, заключается в том, что вы пытаетесь достичь ее в форме внешнего интерфейса или на стороне клиента, в то время как выиспользование when
в вашем текущем наборе правил, которое не дает никакой идеи, если вы не можете сделать это в форме внешнего интерфейса, и это нигде не упоминается.Хотя это работает, если вы инициализируете модель вручную и назначаете значения на стороне сервера.
Если это правильно, вам нужно использовать whenClient
вместе с параметром when
для правил.
См. Обновленные правила ниже
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() !=="";
}',
],
];
Вам необходимо "если заполнено одно из полей, тогда остальные обязательны." изменить условияна OR
вместо AND
, например return $model->name != null and $model->patronymic != null;
должно быть return $model->name != null OR $model->patronymic != null;
, в настоящее время вы проверяете, если оба не равны нулю , тогда поле является обязательным, что противоположно тому, что вы хотите.
После изменения ваши правила должны выглядеть следующим образом
[
['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;
},
],