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));
}
}
Есть ли какое то более изящное решение?