Yii2 не перезаписывать пустой аттрибут

Допустим, в POST данных приходит следующее:

EditForm['id'] = 2
EditForm['login'] = 'user'
EditForm['password'] = ''

Далее в контроллере я нахожу эту модельку, получаю её данные:

$model = (new EditForm())->findOne((int) Yii::$app->request->post('EditForm')['id']);

Делаю print_r($model->attributes). Получаю:

Array
(
    [id] => 2
    [login] => admin
    [password] => admin
)

Потом загружаю полученные данные в модель:

$model->load(Yii::$app->request->post())

И, для примера, выполняю print_r($model->attributes). На выходе получаю:

Array
(
    [id] => 2
    [login] => user
    [password] => 
)

Вижу, что данные успешно загрузились в модель, но вот поле password ранее имело значение admin, а сейчас это пустая строка. Вопрос - как сделать так, чтобы если новый (загружаемый) аттрибут равен пустой строке, то оставлять предыдущее значение этого атрибута?

т.е. чтобы по итогу на выходе иметь:

Array
(
    [id] => 2
    [login] => user
    [password] => admin
)

Пришел к тому, чтобы сделать так, но это костыли, как по мне:

foreach ($model->attributes as $key => $value) {
     // Если новое значение пустое, возвращаем старое
     if (empty(trim($value))) {
          $model->setAttribute($key, $model->getOldAttribute($key));
     }
}

Есть ли какое то более изящное решение?


Ответы (0 шт):